ふらっと C#,C♯,C#(初心者用) Part135
レス数が1000を超えています。これ以上書き込みはできません。
n個の"hoge"が入っている配列を作りたいんだけど、
Enumerable.Range(1,n).Select(i => new{"hoge"}).ToArray()
で良いのかな? ラムダ見るといつも頭混乱するんだけどこれって見やすいの? クエリ式の方が苦手
ラムダだとIntelliSenseでスペルミス防げるじゃん 個人的にはラムダは抵抗なく読める
Pythonの内包表記は苦手 >>663
見やすいと思うが個人差あるな
ただまあλの利点って見やすさじゃないからな >>661
Enumerable.Repeat("hoge", n).ToArray() じゃいかんのか ラムダは過去に一度滅んだ技術だからな。普及するわけがない。 >>670
それじゃ初心者相手にマウンティングできないだろ EFでList<string>のデータを保存するにはどうしたらいいの? >>672
え?滅んだんですか?何の技術だったんですか? >>676
おまえ、初心者丸出しに気づいてないの恥ずかしいな >>678
滅んだ、というのなら、それは何の技術だったのか説明していただけませんか? ただラムダ式が苦手なだけな奴の見苦しい言い訳に構うなよ w >>680-682
スレチだからこっちでやってくれませんか。
過疎ってるからって初心者スレで暴れないでくださいよ、低脳馬鹿ラムダ厨さん。
λ ラムダ式は神 ラムダ式を崇めよ λ [無断転載禁止]©2ch.net
https://mevius.2ch.net/test/read.cgi/tech/1494867168/ 古典教師とラムダ厨と被るわ。
役に立たない古い知識で初心者スレでマウンティングとか。→ ID:n9Q43L/40 www C#の例外処理スレを立てたらここはスレチになるのか w
ほんとラムダ式嫌悪厨は哀れだな w >>683
C# にラムダ式はあるのにどうしてスレ違いなんでしょうか? LINQスレあったよな。なぜそっちでやらないの?
あっ落ちたのかw 過疎りすぎて誰も次は立てる気がないようだw
だって10年でたった1スレすら消費できなかったからなwww 誰も興味ないかよほど嫌われてんだなw >>687
C# に LINQ はがっちり含まれているのに、どうしてスレ違いなんでしょうか? ID:n9Q43L/40 ←惨め杉www 初心者スレでマウンティングするしかないww
> リンク否定派==ラムダ式嫌悪厨
> ただラムダ式が苦手なだけな奴の見苦しい言い訳に構うなよ w
> おまえ、初心者丸出しに気づいてないの恥ずかしいな
> ほんとラムダ式嫌悪厨は哀れだな w
ほんとこいつ初心者スレで煽りとマウンティングしかしてねぇw byte[]buf = 1,2,3,4,5、ETX,7,8,9
AX=1,2,3,4,5
BX=ETX,7,8,9
BufからAX,BXをわけて取り出ししたい。(ETXはAX側でもBX側でも構わない)
AX=buf..TakeWhile(x=>x!=ETX);
とすれば取り込めるが、BXはどうしたらいいのだろう? SkiPWhileは違う。ETXで分離するのが目的だからだ。 >おまえ、初心者丸出しに気づいてないの恥ずかしいな
初心者丸出しが恥ずかしいことか? 陳湖丸出しとは分けが違うがお前はそういう趣味でもあるのか?
>C# にラムダ式はあるのにどうしてスレ違いなんでしょうか?
主観の問題だ。しかし感受性の問題でもある。ひらたく言うとどこにも頭の悪いのはいる。
>古い?どうして古いのでしょうか?
主観の問題だ。少しズレた主観もある。
>C# に LINQ はがっちり含まれているのに、どうしてスレ違いなんでしょうか?
しつこい質問者だからあえてシツコク答えるが主観の問題だ。しかしシツコク追い求めるのはプログラマーの適正でもある。 >>687
なぁ、いい加減誰も使って無いって気づいて欲しいぜ >>696
オブラートで包むと意味が解らないか? 解るようにハッキリ言うと荒れるしな。
困ったものだ。
SkiPWhileじゃだめってのはわかるか? このスレってリンクの質問ばっかだろ
なんで使われてないと思うのか謎
もしかして全員同じ人と思ってるの? だって10年で1スレ消費できないってかなりのもんだよ
まあ、友の会スレに書き込んで無かった君が一番わかってることだと思うし言っても無意味だと思うけどw 試しにC#非同期スレ立ててみようぜ w
どうせ伸びないから w
みんな使ってないもんな w # 先頭文字で、配列の要素をグルーピング
animals = ["cat", "bat", "bear", "camel", "alpaca"]
p animals.group_by {|item| item[0].chr }
{"a"=>["alpaca"], "b"=>["bat", "bear"], "c"=>["cat", "camel"]}
Ruby では、group_by で、配列の要素をグルーピングできる。
ブロックの戻り値が同じ要素で、グルーピングする
他にも、partition で、要素を2つの配列に分けられる C#でもできる
partionはないが多分GroupByで代用できる じゃあGroupBy使って
byte[]buf = 1,2,3,4,5、ETX,7,8,9
をETXの前後で分解してみて。 でも分解する場合には他に適当な方法がないのでは? GroupByとIndexを併用すれば
なんとかならないか? 明らかにそんなやり方よりTakeWhile, SkipWhileを使うやり方のほうが真っ当 >明らかにそんなやり方よりTakeWhile, SkipWhileを使うやり方のほうが真っ当
不味いんじゃないだろうか?
要するにループを頭から2回まわすことになるだろ。
Ax= buf.TakeWhile(〜)
Bx= buf.SkipWHile(~)
それならForeachの方がいいとおもう。
AX= ETXを見つけるまでこっちに入れる。
BX=ETXを見つけた以後はこっちに入れる。 効率が問題になるほど大規模なリストなら原始的な書き方をする。
そうでないならLinqでいい linqがボトルネックにならないならlinqでいいよな。 linqがボトルネックになる場合ってそもそもC#でやっちゃいけないでしょ ZDDアルゴリズムを実装してくれればLINQ使うよ >>692
そういうの、差集合って言うんじゃない? >>718
いいね!いいね! そのヒント。 君が一番頭いい。 ただ、あるインデックスの前後で二分するだけならたぶん無駄に非効率なんだろうけどね scores = %w[1 2 3 4 5 ETX 7 8 9]
numbers = scores.each_with_object({}) do | num, h |
# 配列の初期化
h[:before] = [] unless h[:before]
h[:after] = [] unless h[:after]
if h[:ETX]
h[:after].push num
else
if num == "ETX"
h[:ETX] = true
else
h[:before].push num
end
end
end
p numbers
{:before=>["1", "2", "3", "4", "5"], :after=>["7", "8", "9"], :ETX=>true}
Ruby の、each_with_index メソッドは、引数に蓄積器を指定して、繰り返し処理する。
空のハッシュ { }に、結果を蓄積していく。
"ETX"があったかどうかの状態を記憶して、処理を分岐する >>723
修正
>Ruby の、each_with_index メソッドは、引数に蓄積器を指定して、繰り返し処理する
each_with_index ではなく、each_with_object var temp = buf
.Select(x => new { value = x, flag = x < etx })
.GroupBy(x => x.flag, x => x.value)
.Select(x => x.AsEnumerable())
.ToArray();
var ax = temp.First();
var bx = temp.Last(); flag = x < etx
これってETX以前はTrueになる? たぶんそういう意図だろうけど
xはindexだろけど、etxと比較しても駄目って思うが、、、 linqなんてクソ機能を使うと移植が大変になるわけだが イテレーター書くだけだから逆に移植しやすくなる
抽象化レイヤーがないと全てのループ処理について移植できるかどうか
移植するにはどうすればいいか
例外ケースはないかなど悩まなくてはならない >>734
は?普通はそんなことすらやらなくてよくね? >>735
linqを使わないで移植すると移植しなきゃならないコードが一気に増える
linqを使っていればlinqを移植するだけでほとんど終わり
簡単だね 日曜大工プログラマーなんだけど、実際Linq使わないってなるとプロの方はどういうことを基本としてるの?
プロの方々なら当然Linqも理解して手段の一つとして持ってると思うけど
あえてそれは使わないってなると、同じこと実現するのに何が基本となるのかまじめに教えてください 周りにはlinq使うなよと吹聴しつつ自分は使うというのが最高に決まっとる LINQなんて銘打たれてても只のパターンだからねぇ
デリゲートがインライン展開されるならまだしも
switchまみれのIEnumerator<T>とかは草生える
どうせコントロール追加もAddよりAddRangeの方が良いし
概ねArrayやList<T>のメソッドで済む事が多いな
あと拡張メソッド多すぎでIntelliSenseの邪魔、フィルタが面倒 効率はすでに言った通りだからともかくとして、このスレのlinqの質問のほとんどはarrayやlistのメソッドでは事足りないだろう LINQ使わずに同等の処理をしたいならそれこそReference Source参照で良いんじゃね
個人的にはyieldもブロックスコープで最適化したくなる妙な実装に思えるけど LINQとか表記は割りとどうでも良いからユニットテストがきちんと書けるソースコードにして欲しいと、200行超えの他人のクソメソッドをメンテしてて思った
リファクタリング楽しいです(^q^) Span実験してみたい。しかしSystem.Memoryインストールに失敗する。何でだろう? 素人ながらに四苦八苦しながら小規模の業務アプリを作っているのですが
Program.csに、アプリケーションに保持させておきたい情報をまとめた自作クラスを
staticで保持させておいて、全フォーム通してそれを読み出せるのかと考えたのですが
愚行でしょうか? >>749
なんの問題があるの?
Program.csでなくてもいいし発想そのものはCとかのヘッダファイルとかと同じだよね >>749
本当にその必要があるならその方法でグローバルな情報を持ってOKだと思う。
前に同じ質問で「そんなものコンストラクタの引数で渡せ」と書いてた人がいたが、
むしろそっちの方が不適切。
でも、本当にそれが必要なのかは再考した方がいいかもね。
グローバルなデータなんて普通はそんなにいらないよ
>>750
だからそれを聞いてるんでしょw
っていうかヘッダファイルって意味不明だよww >>749
どんな設定かによって答えが変わるので情報出して
汎用性考えるならインジェクションだけどまだ練度が足りないかな 質問よろしいでしょうか
ある複数のパラメータを持ったクラスを他のクラスのメンバに代入すると、そのパラメータが変更されたら代入先のメンバも書き変わってしまいますよね?
一度代入した時点から勝手に書き変わられたくない場合、パラメータを持ったクラスがクローンを返すような実装をするのがいいんでしょうか。他に定石等あれば教えて頂きたいです みなさまご教授ありがとうございます
グローバルを持つべきか再度よく検討の上やってみたいと思います
>>752
自作クラスだと一手間いるのと、修正しやすさでProgram.csに置きたいなと ApplicationSettingsは自作クラスじゃなくてVSのきのうだよ >>753
端末のIPやらMacアドレスのほか、データベースへの接続文字列を実行中に随時切り替えて接続させてるのですが
そのためのList<string>とかです
あとはNotifyIconをおいて、アプリの動作状況によって各Form上からも通知アイコンの画像を変更させてます >>754
構造体とかイミュータブルオブジェクトとか >>754
(1) クローンを返す
(2) イミュータブルな別の型(インターフェイス or コンポジション)として返す
(3) 気にしない >>754
メンバに参照を保持るのは禁じ手
そのインスタンスが死んだらハングアップすんじゃん
必要であるたびにメソッドの引数から必要な分だけ必要な形で渡すのが真っ当なやり方 >>755
そのファイルにクラスおいた方が楽って感覚がわからないな
1クラス1ファイルが基本だし別のファイルおいた方が色々楽だと思うけど
まさかないと思うけどpublicなインナークラスにするのはよくないから気をつけてね >>761
拠点毎のデータベースと、全拠点と端末を管理したり共通の設定情報を保持するデータベースとわけてるので
必要な情報に応じて動的につないでSQL文を実行させてます
>>763
全体を管理するデータベースの情報を元に端末毎に動作する権限や機能を割り当てるようにしてるので
起動するフォームを異なります
なので、初回フォームが起動する前に端末情報をProgram.csに保持させたいということと
異なる役割の端末(Form)からでも共通の設定値を利用したかったからです
>まさかないと思うけどpublicなインナークラスにするのはよくないから気をつけてね
この辺の理解がだめです・・・(書籍を読んで独学で一人でやってます)
外部クラスなりにProgram.csにおいたStaticな自作クラスにアクセスさせてはだめってことなのかと理解しましたが
具体的にどうだめなのかがさっぱりで・・・ Listで中にclassをaddしていって
中のclassが解放されて歯抜けになって状態でaddした場合
nullの配列にaddされるか
歯抜けになったのをソートして埋めることって出来ない? 自分で明示的にnull代入しない限りListが歯抜けになったりしないだろ Listで型をclassにしてaddしていって
格納したclassがいくつか解放されて歯抜けになった状態でaddしたときに
歯抜けになった配列を埋めるようにaddされるか
歯抜けになったのをソートして埋めることって出来ない? >>766
いくつかaddして
listとは関係なく外部でclassを解放した場合
歯抜けになるでしょ その外部でclassを解放するって具体的に何のクラスのどのメソッドを呼んでいるんだい >>768
解放したいんじゃなくて
解放されて歯抜けになったとこにaddするか
ソートして歯抜けを埋めたいんだって dipose呼んだらゾンビになるだけでそいつはそいつだぞ まあ、いいや
超常現象でnullになるとしよう
Addに自動で隙間を埋めるような介護機能はない
IndexOfでnullの場所を探すのみ >>764
何を言ってるのかよく分からないけど、
Program.csにProgramクラスとTestクラスを作るのと、Program.csにProgramクラスTest.csにTestクラスを作るのは同じ
どっちでもいいけど普通は後者かな
ただ、以下のようなインナークラスにはするなってこと
static class Program{
...
public static class Test{}
} >>778
よくわかってなくてすみません
ただ、まさにインナークラスになる記述です
具体的に避けるべき理由を教えて頂けませんか? >>769
classがオブジェクト参照を意図するなら、Listが持っている時点でインスタンスは解放されない
Dispose()はアンマネージリソースといった“メンバーの解放”でインスタンス自体を解放はできない
GCは強参照されていないインスタンスしか解放しないので、明示的に代入しない限りnullに成りようがない
ひょっとしてやりたいのはこういう事か?(※機械翻訳のようで日本語が不自由
https://docs.microsoft.com/ja-jp/dotnet/standard/garbage-collection/weak-references
IDisposableに処分済みインターフェイスは無く、ObjectDisposedExceptionを投げるクラスは独自の内部フラグ >>779
関係ないクラスを一緒くたに管理しないほうがいいってこと
マシン設定ならマシン設定
データベース設定ならデータベース設定
権限管理なら権限管理
アイコン管理ならアイコン管理
プログラムは1つ1つ関心ごとに分けて後で組み合わせるのが基本
設定項目も一緒くたにしないで個別に設定クラスを作る >>779
アクセス名が長くなるから外に出せば見栄えが良くなる。
public staticだから動作には関係ない
ここで何でも聞いて気にするより動かしてみて確認したほうがいい >>779
Programのデフォルトの公開範囲がprivateだから
って思ったんだけどクラスって省略されるとinternalなんだね
じゃあ別にやってもいいかな
ただ、各フォームから起動元であるprogramクラスにアクセスするのは違和感があるからインナークラスは推奨しない
よく言われるグローバル変数にせず、フォームの起動時に引数で渡せばいいと同じレベルの話だから余り気にしなくていいかも >普通はVSのフォームデザインでプロパティからApplicationSettingにてPropertyBindingを行う
これはどういう意味や?
バインディングってのはデータソースがコロコロ変わる時に便利なだけだろ。何でグローバル変数みたいな
変わらんものに「普通は、、、、使う」なんて言いきれるんだ。
意味わからん。 グローバル変数(static変数)なんて難しすぎる機能は初心者には扱いきれないでしょう
普通にコンストラクタやメソッドに必要なものを渡していけば確実、安全、簡単だよ
var loginForm = new LoginForm();
loginForm.ShowDialog();
var loginUser = loginForm.LoginUser;
var loginService = new LoginService();
loginService.Login(loginUser);
var systemInfo = SystemInfo.Read();
var databaseModule = new DatabaseModule(loginUser, systemInfo);
var authModule = new AuthModule(databaseModule, loginUser, systemInfo);
var domainService = new DomainService(databaseModule, authModule);
var iconManager = new IconManager("url://to/icon/resource/base");
var formFactory = new FormFactory(databaseModule, authModule, domainService, iconManager, loginUser, systemInfo);
Application.Run(formFactory.CreateMainForm());
loginService.Logout(loginUser); 設定値と処理を密にすると
設定値集Aと設定値集Bとか異なる設定で動かさなきゃいけないときにウザいよ
それを消そうとするとグローバル変数は消えるけど
仕様でそういったもんが別にいいなら問題は起きない
環境変数みたいにインストール時に固定なんだよ的な >グローバル変数(static変数)なんて難しすぎる機能は初心者には扱いきれないでしょう
何を根拠に難し過ぎるというのか意味不明だ。
複雑だからか? どう複雑なんだ? 複雑なわけない。w
他に難しい理由があるのか? 誤動作するからか? するわけない。w
ちゃんと理由を上げて説明してみろよ。 >>758-760、>>762
ありがとうございます
参考になりました。頂いた内容で再検討してみます 入力可能なコンボボックスの値を取得したい。
ドロップダウンで選択した値を取得する事は出来た。
手入力した値を取得するのはどうすればいいのでしょうか?
https://i.imgur.com/Xh6vU1X.jpg ググったら
selecteditem.tostring()でやってるのが多いけどそれだとどうなの? >>791
こうですか?
if (comboBox.SelectedItem != null)
//cb = ((ComboBoxItem)comboBox.SelectedItem).Content.ToString();
cb = comboBox.SelectedItem.ToString();
else
//comboBox.SelectedIndex = -1;
cb = comboBox.Text
}
値の前にこんな文字も取得してしまいす
System.Windows.Controls.ComboBoxItem:
if〜で選択した値は取得できてます。
else〜で手入力した値を取得したいのですがうまくいきません。 >>790
何が聞きたいのかもっと明確にしないと誰も答えようがないと思うw
説明が下手なら(たぶんそうだと思うがw)人に冗長だと思われることをいとわず
くどくど馬鹿丁寧に書いて 編集可能コンボボックスを編集してSelectionChangedイベント発生するか? >>792
cb = comboBox.Text
これだけで良くない?
if elseで分岐させる意味よく分からない >>794
しないね。
>>790
KeyUpイベントでComboBoxのTextプロパティを読めば良い。 killfocus的なイベントで取得しねーとあれっしょ? >>795
そうすると、値を手入力したときに、選択した項目の値がおかしくなるんです >>797
そこら辺はケースバイケースかな。
>>798
WPFみたいだから、そのイベントは無いぞ。 >>798
これは駄目でした
private void comboBox_TextChanged(object sender, TextChangedEventArgs e)
{
String cb = comboBox.Text;
} そもそもコンボボックスでリストにない値を使うやり方がおかしいんですかね? <ComboBox x:Name="cb" IsEditable="True" TextBoxBase.TextChanged="cb_TextChanged" />
private void cb_TextChanged(object sender, TextChangedEventArgs e)
{
var text = cb.Text;
} >>805
おぉ、そんな使い方が。
>>798
すまない。>>800は間違いだった。 >>805
出来ました。ありがとうございますm(_ _)m >>807
スマホで撮った画像を上げるのはよくない
コードを貼れ
画像を貼るにしてもwindows標準のsnipping toolで必要なところだけ切り取ってアップしろ >>808
すみません
PCでここを開けなかったもので…
画像サイズもデカすぎました
次から気をつけます そんなしょうもないことに上から目線で偉そうにいう馬鹿に謝る必要ないのにw 一歩引いた視点からスレを冷静に観察できる俺カッケー StreamWriterでファイルの末尾へ書き込む場合、
ファイルのサイズは書き込み速度に関係しますか? >>818
回答でいいんですよね?
そのようです。ありがとうございます なんでだろうね?
関係しそうな気がするのに不思議だよね 逆にどんなファイルシステムなら影響が出るのかそっちの方が気になるよw ただのラッパーだから分からないが正解。Streamに依存するが正解。DATならまあ遅くなるわな。 そうかな
CMTだろうが穿孔テープだろうが関係ないと思うけどw 関係ないよw
メディアの問題というよりファイルシステムの問題
シーケンシャルにしかアクセスできないからシークが遅いとか、そもそも追記ができないとかいう話なら分かるが、
追記可能なのに書込み速度がファイルのサイズに影響するファイルシステムってちょっと思いつかん >>825
記憶媒体がどういう仕組みで記憶してるのかよくわからないから
メモリみたいなの想像してみた
追記に足りない領域しか空いてなかったら再確保するんじゃね?みたいな 業務アプリばっかりやってきて最近のトレンドに全くついていけてない老害に教えてやってほしいのですが、
●やりたいこと
WPFアプリ、SQLite(最新)を使用、EntityFrameworkで実装したい
DBはそれほど複雑でなく、せいぜい2つのテーブルをjoinする程度、あとは、各テーブルをCRUDする感じでサンプルに毛が生えたようなレベルです。
.NETのバージョンはv4.6.1とした場合、
どのパッケージを使用したらよいだろうか?が知りたいです。
参考にしたいな、と思った記事は、
https://qiita.com/massu/items/b2546a0d876e207de882#%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90
SQLiteで簡単にEFできるかな?と思ってコードを眺めていました。
だが、パッケージ名で.NET Coreを使用するように見えてしまい、
WPFで使っていいの?など何が何やら、、、
本人のバックグラウンドとしては、v3.5程度までの業務コーディング知識は
あるつもりなのですが、なかなか最近の技術、名称についていけておらず。。
最近のトレンドに乗りつつ、知識をつけつつ開発したいと思っています。
ちなみにこのアプリは業務使用ではないのです >>829
まずはこの辺の誤解を
・WPFは最近のトレンドなどではなく、とっくの昔に死んだ技術である
・EFはサーバー用のオーバーヘッドが極めて大きいフレームワークであり、デスクトップアプリで使うものではない 一番大きなギャップは、今の.NET界は完全にWebに傾倒していて、コミュニティの話題や新しい技術はほぼ全てWebであるということだな
デスクトップアプリなんか完全に時間止まってるから.NET 3.5の知識だけで全く問題ないよ >>831
>EFはサーバー用のオーバーヘッドが極めて大きいフレームワークであり、デスクトップアプリで使うものではない
ソース >>831
「死んだ」の定義を
トレンドでないというのはその通りだが >>825
抽象度の違う話だけどフラグメント化の状態によってはファイルサイズが大きくなると書き込み速度遅くなるよね? WPFが生まれた時からずっと疑問なんだが
これって覚えたほうがいい技術なのか?
すぐ主流になるだろうからそれから乗り換えようと思ってもう何年もたつんだが まぁWinFormsよりはマシじゃねえかなという感じ MSはhtmlとjavascriptでデスクトップアプリを作るPWAに手を出し始めた
C#自体がどうなるか不透明にになってきたね xmlでシリアライズするときに、配列のタグに番号を付与していくにはどうしたらいいのでしょうか >>844
なんか勘違いしてるみたいだが、PWAはWebアプリだぞ
今時ガワで何でもやるアプリなんてほとんど無くて、重要なのはWeb越しにある裏側の仕組みだ
つまり、PWAサポートするからバックエンドをVSやAzureで作ってね、ということ
そして、MSはC#を最重要なWebバックエンド開発言語として位置付けている
今更デスクトップアプリなどという時代遅れな技術を使いたくない、Web技術で全部作らせろ、というニーズは.NET開発者からも多いんだぞ?
今時C#=Winデスクトップアプリ向け、なんて言ってるのは10年遅れ >>847
C#の強みは、デスクトップとwebが同じテクノロジーで構築できることだろうし
ソレが崩れたらバックエンドの代わりはいくらでもあると思うんだわ
javaでもphpでもrubyでも >>848
今時Webできない開発者なんかいない(そうでない連中はどうせ新しい物買わないし先細りだし放っといてもMSから逃げられないから餌をやる必要がない)
MSから見ればそこに拘る意味がなくなってるんだよ
今の.NETプラットフォームはAzure含めて純粋にWebプラットフォームとしての使いやすさで勝負していて、
十分に競争力のあるものになってるし実際大成功してるよ 見様見真似で勉強始めたばかりの初心者です
以下の記述でerror CS0234が出まして、ここから学習が進んでません
class test001:System.Windows.Forms.Form
{
static void Main()
{
System.Windows.Forms.Application.Run(new test001());
}
}
スクショttps://dotup.org/uploda/dotup.org1474023.jpg.html
各単語の意味もわかってませんが、
空のウィンドウが表示されるだけのソースのつもりで書いてます
1.基本的にこの記述は間違っているのか
2.error CS0234の対処法ググるとVisual Basicの設定方法がヒットするんですが、
メモ帳とコマンドプロンプトで制作してる者としてはどう対処すべきか
(取り急ぎ開発環境導入しますが、メモ帳だけでやってる方もいるらしいので)
以上2点ご教示願います >>850
どんな環境で何を見て始めたのか知らないけども、
VSならプロジェクト作成から「Windows フォーム アプリケーション」を選んで実行すれば、
空のウィンドウが表示される
初心者ならコマンドプロンプトで作らなくていいんじゃね? >>850
初心者がIDE入れないでやるのは自殺行為
自称上級者でもメモ帳ではまあまともにアプリなんて作れない
IDE入れる
本を買って来て手順を踏む
5年たったらメモ帳でアプリ製作に挑戦 c#はどの場面でもメインにはなれないけど隙間隙間でやっていくだろう >>850
おそらくSystem.Windows.Forms.dllへの参照が埋め込まれていないんじゃないかと
うちの環境だとIDE入ってるせいかSystem.Windows.Forms.dllへの参照は勝手に入るが
コンパイルエラーコードはこの辺りに纏まっている
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/compiler-messages/CS0234
といってもVSはVSでエラーコードに関してヘルプをBingで検索しだす奇天烈仕様 azureの知識とかどうやってつければええのですん? 回答ありがとうございます
実際の対策としてVS導入はするつもりですが、
知識欲として、参照が埋め込まれていない状態をIDE介さずに解消するのは難しいのでしょうか? >>857
コンパイラスイッチで参照追加すればいいよ >>848
> javaでもphpでもrubyでも
よりによってなんでそんなアホな選択肢なんだよ w > 今時Webできない開発者なんかいない
Webやってるのって少数派じゃねーの。使い捨て技術者のイメージ。 >>857
ビルドも通らない人間が気にするこっちゃないよ >>861
そんなことはないでしょ。
でも、ドリーマーが多いのは確かだと思う。
なにせ20年ずっと「UIはHTMLの時代になる」って言い続けてるんだからw >>857
csc test.cs -r:System.Windows.Forms.Dll
でもできない? でも正直なところ一般人の目に付く範囲のアプリってoffice除いたら
大体htmlで構成されてるものが多いんじゃないか
そうじゃなくてもネットワークがないと何も始まらない WEB技術なんか追いかけてたら廃人になると思う
フレームワークが使い捨てだもんな Webの特にフロントエンドはひどすぎるな。JavaScript。
生産性の低い道具を使って仕事たくさん生み出そうってことなんだろう。
俺もReactだけは勉強したけどさw
去年のQiitaアドベントみると去年はVue.jsだったのか?ww
アホすぎ 業務系はレイヤー分割下手くそな初心者みたいなSE, PGばっかりだから
フロントを入れ替える=全改修みたいな悲惨な事になるから、頻繁にフロントを変えるって発想ができないんだろう
ここにはどうしても高い文明の壁があるから分かり合えることはない ちょっと流れてしまいましたか、貴重な意見ありがとうございます。
教えていただいたページで勘違いしていたところがスッキリしました。
WPF登場してから時間が立っているからか、古く感じてしまうのは仕方なしなのかな、と思う一報、クライアントアプリを扱う現場ではまだまだ全盛、WinFormも負けてられない勢いで使われているとおもいます。
また、一部、EFはサーバーサイドで…と言う意見もいただきましたが、クライアントでも、問題ないですよね、多分。
というか今回の質問としてはwebでないので3層は意識せず、でもUIとロジックの分離、その先の責務の分離を考えると、良い方法かな、と思いますが…じゃあEF使わないんだったら、どうしよう、constでクエリ定義してDataAdapterにぶっ込む…なんてしたくなかったですし。。。
もう少し調査は必要かもですが、ちょっとやってみたいと思います。 >ここにはどうしても高い文明の壁があるから分かり合えることはない
例えばどんなところが「高い壁」といえるんだ? アセンブラの理解を必要される世界は土人の世界と言える。 高いか低いかそれすらわからない。要するに何もわからないという壁だな。w 本人にとっては高い壁なんだから放っておいてあげなよ アセンブラの理解ってか、論理回路を理解するかどうかじゃね?
ちょこっと弱電をかじれば、なんとなく理解出来ると思うけども >>875
おまえがなんとなく理解出来るんなら大体の人は正確に理解できんじゃね? アセンブラは何とか成るけど、そのまま16進数打っていた奴には敵わんかったわw
いくら8ビットで命令少ないからって常人が出来るものじゃない >>876
ソフトの原理を理解していれば、
電気回路も大体理解出来るよ。 >>877
こういう話で 8086 のバイトコードを丸暗記していたという話はきいたことがないね >>880
Z80はアドレッシング・モードが簡素なので、手計算でジャンプ先の数字セットできるけど
68とか86辺りになると人の手に負えないからね >>877
命令が少ない上に、規則があるから簡単だよ。
それより、2、30人の家の電話番号覚えてた方が驚異的。今はもう絶対無理w Task taskA = Task.Run(async () => {
int count = 60;//6sec
while (count-- > 0) {
Debug.Print("sw0:" + sw.ElapsedMilliseconds.ToString());
await Task.Delay(100);
Debug.Print("sw1:" + sw.ElapsedMilliseconds.ToString());
}
} );
taskA.Wait(5000);
5秒で一旦止まるように見えるが、暫くするとまたタスクは回り始める。C#バグかよ。 しかもUIは5秒間止まってしまう。TASKの意味ないよ。書き方を間違ってるんだろうか? ちなみUIを止めたくなければtaskAをawaitすれば良いはず >>886-887
何だか良く分からないけど、どうみても6秒以上掛かるコードだし
Wait()はタイムアウトしても終了させないし、待機時間ブロックする
UIスレッドでしたら固まるし、awaitは解放したいスレッドで使う物だよ >>886
思い違い
WaitでGUIのスレッドを使って待機してるのでGUIはその間動かない
5秒たつと待つのをやめてそのまま進む
そのtaskはタイムアウトでは止まる用には設計されてない >>888
上はFormに貼り付けたボタンイベントで実行してるだけ。それなのにボタンを押したら
5秒間フォームが固まる。w 次はasync voidで定義してなくてエラーになる質問が来ると見た >>891
サンプル見て書いたつもりだったが、間違いでしたか?
Asyncが非同期処理を宣言するような機能で、Awaitは解放するスレッドに付けるのだから、Task.Delay(100)を
解放してUIに戻す.つまり100msec待ちながらもUIに制御を戻すってことではないのか? >>895
UI止めたくなければこうやで
taskA.Wait(5000); ⇨ await taskA; >>895
Taskはスケジューラを指定しない限りワーカースレッドで動くよ
その非同期ラムダでawaitしてもワーカースレッドが解放されてるだけ
UIスレッドで非同期待機するなら作成側を非同期メソッドにしてawaitする await/asyncはネットに碌な例がないからしゃーないわな 間違った理解
awaitがあるとUIに制御を戻す
awaitがあるメソッドに出会うとUIはその場で対象のメソッドの終了を待つ
2番目が特に誤解を招きやすい >WaitでGUIのスレッドを使って待機してるのでGUIはその間動かない
>5秒たつと待つのをやめてそのまま進む
GUIのスレッドを使って待つの当然でしょ。それが目的だから。だめなの?
じゃあどこで待てばいいのだ?
void ボタン_Click(){
TaskAを実行(起動);
TaskAの完了を待();
}
処理の流れはこうだけど、これは駄目ってこと? じゃあどうするの?
void ボタン_Click(){
TaskAを実行(起動);
}
どっか別のところで、例えばタイマー割り込みで
TaskAの完了を待();
ってことか? 流れがわかり難いので不細工だよな。「シーケンシャルに流れを書いて且つUIが
止まらない」というようになってないと駄目だろ。 ちょっと語弊があるな
間違った理解
awaitがあるとUIに制御を戻す
awaitがついたメソッドに出会うとUIはその場で対象のメソッドの終了を待つ
2番目が特に誤解を招きやすい >>902
やっぱり君か
間違ってるのは自分なのに文句ばかりだな >>902
>GUIのスレッドを使って待つの当然でしょ
違うね
GUIのスレッドを戻してあげないとGUIは他の仕事ができない winformsで非同期やってた時、デバッグとリリースで動作が違くてはまったなぁ
CheckForIllegalCrossThreadCallsは絶対に許さない >>906
確かそれ挙動は同じなんだけどデバッグ時はIDEかなにかにスレッド渡す奴だっけ? >>902
いやだから…そのWait()の代わりにawaitをUIメソッドに書くんでしょうが…
そうすれば一旦スレッド制御を返し、Taskが終われば取り戻し再開してくれる
レガシーな書き方だってTaskScheduler.FromCurrentSynchronizationContext()を指定して
ContinueWith()すれば良いし、UIコンテキスト取得しといてワーカースレッドから投げても良い >>908
こいつをTrueにしないと別スレからUI触った時に例外を吐いてくれなかったはず。デバッグで動かしてるか否かで初期設定が変わる。
だいぶ昔だから間違ってたらゴメンね。 >Taskはスケジューラを指定しない限りワーカースレッドで動くよ
>その非同期ラムダでawaitしてもワーカースレッドが解放されてるだけ
>UIスレッドで非同期待機するなら作成側を非同期メソッドにしてawaitする
言ってることの意味がわからない。Async()=>{}にしてるでしょ。
しかもこのラムダはRunが確保したスレッドプールで動作してるんでしょ。意味的にそうでないと
可笑しい。でラムダのその中でawaitしてるんだから、、、、って
UIスレでボタン受付
スレ4000でラムダ起動
AWAITでスレ4001にスイッチして100msec待つ
100msec完了でスレ4000に戻る。
スレ4000でループ
Task.Wait(3000)はUIスレでスレ4000の終了を待ってる。
ここで待ってる限りUIは止まるってことね。
そういう意味か? 何となく解った。 まぁ別スレからUI触るなクソ野郎と言われればその通りなので、当時の俺が悪かったのは間違いないのだが。 >いやだから…そのWait()の代わりにawaitをUIメソッドに書くんでしょうが…
そういうことね。解り申した。 ちなみに非同期の勉強ならasync/awaitよりも
生threadから始めた方が良いと思うんですが? あんまり実践で使うことないな
基本的にスレッド必要なときってメソッド内で終わるほど準備ヌルくないし
簡単な機能使って実装すると大抵バグってる ま非同期など定形を何本か覚えたら、ソレ以上凝ったことしても大して効率上がらんのよね たまにはBackgroundWorkerさんのことも・・・
ううん、忘れていいw クライアントアプリならイベントハンドラでの await Task.Run だけ覚えてそこから先は全部同期でいい
WebだとTPL Dataflowとか CancellationToken とかまで踏み込んで使いこなさないとあまり意味ないけど >>920
>そこから先は全部同期でいい
は下手に非同期使うと不味いことあるの? >>921
そもそも勘違いしてるみたいだが、asyncはオーバーヘッドが大きいから一般にはなるべく使わないほうがいい。
じゃあWebではなぜ逆に非同期を全面的に積極的に使うかというと、
多数のリクエストを同時に処理するときのスレッドプールの消費を抑えることでメモリ使用量を低減できるから。
クライアントアプリなんか必ず同時に一人しか使わないんだから、UIのイベントの度にRunしても全く問題にならない。 >asyncはオーバーヘッドが大きいから一般にはなるべく使わないほうがいい。
これが独自研究の独自理論 個人的には非同期IOのシナリオの場合ならクライアントでも積極的に非同期使うようにしてるにゃ そもそもなぜ非同期なんかにしたいのか?
すっげー不具合増えそうだしぶっちゃけやるんじゃねーよ
ぶっころ >>926
> 結論 – 非常に短いメソッドにasync/awaitを使うことを避ける、あるいはきついループ内でawaitステートメントを持つことをを避ける
使い所を間違えるなとしか書いて無い。
「一般にはなるべく使わないほうがいい」とか、曲解だよ。 >>930
じゃあ言い換えようか?
複雑になる、オーバーヘッドが増える、それをペイするだけのメリットはない。
GUIをブロックしないという超重大な目的さえ達成できれば十分。 >>920
クライアントアプリならREST API叩くのもごく一般的だと思うが、それも全部同期でやるのかい? >>932
理解してないのは君だけ
イベントハンドラでだけawait Task.Runしてその中は全部同期でやれって話だぞ var cant = new System.Threading.CancellationTokenSource();//なんじゃこれは?
Task taskA = Task.Run(async () => {
int count = 60;//6sec
while (count-- > 0) {
〜処理
cant.Token.ThrowIfCancellationRequested();//例外発生
}
}, cant.Token );
何じゃらほい? 大したことできんのにたいそうな名前を付けやがって笑える。普通にflg使ったらいいだけだろ。 >>934
何が面白いのか知らないけど、同期でREST APIを呼ぶケースなんて普通にあるぞ
>>936
正しい非同期メソッドは必ずCancellationTokenを引数として受け取る
そして、非同期メソッドからさらに別の非同期メソッドを呼ぶときには引数にcantを渡す
そうやって共通のCancellationTokenを引き回すことで、別の非同期メソッドを呼んでる間でも待機状態を確実にキャンセルできる
同期ならabortすりゃいいだけだけどね これってどういう意味があるの?単純にフラグを叩けばいいだけだろ。大して利点があるようには思えんが?
ManualResetEventの代わりにflg=Flseで初期化しておいて、setのところでflg=trueにして、
while(!flg);で待機したらいいだけではないのか?
var waitHandle = new ManualResetEvent(false);
Task.Run(() => {Thread.Sleep(2000); waitHandle.Set(); });
Console.WriteLine("Wait");
waitHandle.WaitOne(Timeout.Infinite); 100msecのタイマー割り込みの中でこういうのを順番に実行する。
void timer1(){
switch( state){
case 0:
if( do1() ){state++;}; break;
case 1:
if( do2() ){state++}; break;
case 2:
if( do2() ){state=0}; break;
}
}
何かもっとスマートな書き方はないか? stateがマジックナンバー感があるので、配列よりDictionaryクラスっても、
でも賛否両論です。 Stateを使いたくない。
while(1){
while(!do1()){ wait(100);}
while(!do2()){ wait(100);}
while(!do3()){ wait(100);}
}
こんな感じでなんかいい書き方は? >>944
state++;
if(state>2)state=0;
ってやればスマートにならね? >>947
doの処理ステップによって遅延がでてこない? >>949
遅延は無視できるレベル。
>>948
ならない。というかStateは使いたくない。 >>944
ネタっぽい質問だけどこんなのでも作るとか
public class RoundRobin
{
int index = 0;
RoundRobin(params Action[] jobs)
{
if (jobs == null || jobs.Length == 0) jobs = new Action[] { () => { } };
this.Jobs = new ReadOnlyCollection<Action>(jobs);
}
public ReadOnlyCollection<Action> Jobs { get; private set; }
public void DoNext()
{
Jobs[index]();
index = ++index % Jobs.Count;
}
}
余談だけど、組み込みか何かの人?
タイマー割り込みてw どんどんソースが長くなる不思議。タイマー割り込みを馬鹿にしてるからだな。 まあ、動いてるならスマートにする必要ってないよな
普通に記述してそれがイモっぽいなら
そりゃ言語がイモなんでしょうがないんだよ stateいらないとか、テストやデバッグするときstateが分からなくなるのに。
マルチスレッドや同期を書かせたらいけない人。 Timer1のなかにステートマシンつくったらなんでもできるけど、わかり難いだろ。
フローチャートのように上から下へ自然に流れる方がいい。 >>952
var cts = new CancellationTokenSource();
Task.WhenAll(
Task.Run(() => EventLoop(cts)),
TimerLoop(cts.Token)
).Wait();
こういう書き方を見るにつけ、なにかいい方法はないかとつらつらと考えてる。 あとはこんなの
IEnumerable<Action> JobSequece()
{
while (true)
{
yield return () => { ... };
yield return () => { ... };
....
}
}
async Task RoundRobin()
{
foreach(var j in JobSequece())
{
await Task.Run(() =>Thread.Sleep(100));
j();
}
}
タイマー割り込みって言葉使うのはHW直接いじる超低水準のコード書いてる人か
80年代マイコン少年のおじさんだろうねw >>958
WhenAllをよく使う人はTPL Dataflowを覚えたほうがいい C++ならTimer割り込みって言葉は普通につかうぜよ。 本を読みながらUnityでC#を勉強しているのですが・・・
それぞれのコードの最後の行にあるnewは何をしているのか教えて下さい。
public class ArrowGenerator : MonoBehavior {
public GameObject arrowPrefab;
float span = 1,0f;
float delta = 0;
void Update()
this.delta > this.span) {
GameObject go = Instantiate(arrowPrefab) as GameObject:
int px = Random.Range(-6, 7);
go,tansform.positon = new Vector3(px, 7, 0);
}
}
}
他にも
public class IgaguriController : MonoBehavior {
public void Shoot(Vector3 dir) {
GetComponent<Rigidbody>().AddForce(dir);
}
void Start() {
Shoot(new Vector3(0, 200, 3000));
}
}
長いので分割します。すみません。 それぞれ最後の行の、
go,tansform.positon = new Vector3(px, 7, 0);
Shoot(new Vector3(0, 200, 3000));
このnew演算子?は何をしているのでしょうか?
それぞれVector3というメソッドが直後のカッコの中の引数を渡していると思うのですが
その手前のnewが何なのかわかりません
クラスをインスタンスにするときに使用するnewとは若干形が違いますよね
いくら調べてもこの形のタイプのnewが出てこなくて・・・。
どなたか宜しくお願いします・・・。 ああ・・・空白が埋まってしまっていてとても見づらいですね
本当にすみません >>966
いや、見た通りやよ
Vector3クラスのインスタンスを作成しつつ代入しとるんや メソッドではなくクラスですね。
newは
クラス名 変数 = new クラス名()
の形しか見たことなくて・・・
上は
Vector3 go,tansform.positon = new Vector3(px, 7, 0);
という風に頭にもVector3 を付けないのですか?
下は
Shoot(Vector3 ABC = new Vector3(0, 200, 3000));
といった風に、ABCの様な変数は表記しないで、クラス名にnewを添えただけでも
クラスをインスタンス化できるのでしょうか?
>>970
一応、上のは入門書に書いてあるコードなのですよね
入門書が不親切なのか私に応用力がないのか・・・後者っぽいですね
他の入門書も調べて買ってみます コードを形で覚えてるのかなぁ
式という概念は分かるかな? >>971
コードがタイポってる気がするが、上はフィールドへの代入だから
TransformクラスでpositionはVector3Dであると既に定義されている
下はコードにメソッド定義も含まれていて仮引数の型が書いてあるよね
変数宣言の型指定であって、インスタンス化には代入を伴う制約はない
未初期化の変数は参照できないから殆どは宣言時に代入もされるけど
それぞれの字句に切り分けて意味を把握しないと歪んだ理解になります >>974
とても詳しく教えて頂きありがとうございます
そういうことなのですね・・・やっと少し理解できました
意味を捉えようとは思って勉強していたのですが形で覚えていたんですね
1単語?ずつ意味を捉える様に意識してみます
皆さん変な質問にお答え頂きありがとうございました! Vector3 vec; 変数定義
vec = new Vector3(1,3,2); インスタンス生成後、変数に代入 処理の結果を返してくれるapiで、例えば
貼り付けるテキストを決める
フォント名設定
色設定
文字の大きさ設定
なと細かくapiを呼び出ししないといけない場合でも、結果を受け取る変数はやっぱり使い回ししないほうがいいですか?その変数はapi呼び出したあとエラー確認するだけです 個人的には、
異なるインスタンスなら原則使い回さない
インスタンスが同じなら使い回す >>977
そもそも変数いらんのでは?
if (api.Foo().HasErros) return;
if (api.Bar().HasErrors) return;
... >>978-980
ありがとうございます。
変数を使用しない方法もありますね。ただメソッドは引数が多く、文が長くなるため悩み中です pythonで言うデコレーターはC# のどれに辺りますか? C# 修飾子 でググるとC++ 修飾子の記事しかHITしません。 属性(Attribute)
Pythonのデコレータとは違って、それ自体はメソッドに純粋にメタデータを付けるだけの機能なので、
属性を処理するにはリフレクションを駆使する必要がありクソ面倒臭い
フレームワーク作る人のための機能 >>983-985
デコレータ自体を実現しようとするなら厄介よね、一般的なデコレータに相当するもので良ければ
@propertyならC#プロパティがあるし、@classmethodや@classmethodならstatic修飾子で済むんだけど
実装に関わってきそうなのはデリゲートとかかな、Pythonで言えばbound/unbound methodに相当する デコレーターをC#で実現するなら
インターフェース使って素直にパターン実装するか
横断的関心事なら属性使うかのどっちかじゃない?
使いたい目的次第 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 27日 10時間 23分 38秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。