C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
■Visual Studio 2015 Community & Express (無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/
■コードを貼る場合はこちら
http://ideone.com/
■前スレ
C#, C♯, C#相談室 Part92 (実質93)
http://echo.2ch.net/test/read.cgi/tech/1485589613/
■次スレは>>970が建てる事
建てられない場合は他を指定する事。 ■過去スレ
C#, C♯, C#相談室 Part89
http://peace.2ch.net/test/read.cgi/tech/1443271409/
C#, C♯, C#相談室 Part90
http://echo.2ch.net/test/read.cgi/tech/1455160063/
C#, C♯, C#相談室 Part91
http://echo.2ch.net/test/read.cgi/tech/1467142749/
C#, C♯, C#相談室 Part91 (実質Part92)
http://echo.2ch.net/test/read.cgi/tech/1467211515/
C#, C♯, C#相談室 Part92 (実質Part93)
http://echo.2ch.net/test/read.cgi/tech/1485589613/ スレ番間違えたクソスレ立てた分際でID変えて自演とな 基地だらけだな
あっちは間違えてなのかわざとなのかワッチョイに変わってるから無しスレ立てただけだろ ワッチョイあったほうがいいよ
linqの宣伝で埋められるからwwww 前スレでよくわからなかったんだけど
EntityFrameworkはオワコンなの? >>12
EFはオワコンどころか常に始まってるからジャパニーズドカタには手を出しづらい >>12
(能力がなくて)触れない人がいるだけだよ テンプレがいつまでもVisual Studio 2015なのは何だかなあ
次から2017にしてくれ 戻り値のあるTask関数の作り方を教えてください
public Task<bool> Hoge() {
return true;
}
とするとエラーメッセージがでます >>16
恐らく非同期メソッドと混同してるんだろうね >>16
public Task<bool> Hoge() {
return new Task(
() =>
{
return true;
}
);
} フォームのRadioButtonのCheckedChangedイベントの順って、
外れた方→新たに選択された方であることを昔(.NET2.0)から保証されてるよね?
今こちらの環境(.NET3.5と.NET2.0の両方)で上記順であることは確認したのだけど、
コメントに「逆だからこうした」あり、逆順を期待するコードがあって???となってる。
Web漁ってみたが、MSDNには明記されてない。
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.radiobutton.checkedchanged(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2
MSDNやStackOverflow含めたほとんどのサイトのサンプルコードは
someRadioButon.Checked==true を見てるからあってるはずだけど、
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.radiobutton(v=vs.110).aspx
http://stackoverflow.com/questions/11493845/radio-button-checked-changed-event-fires-twice
中には逆を書いているところもある。
http://yan-note.blogspot.jp/2008/12/radiobutton-checkedchanged.html
保証されてないって事はないよね?昔から変わったとも思えないのだけど。
(こちらの実装ミスであることを確認したい) >>19
回答じゃなくて悪いけどそもそもそんな順番に依存するようなコードそのものが
問題だと思うね。
っていうか、そもそもRadioButtonはAutoCheck = falseで使うのが基本だと思ってる。
サンプルコード的な短いコード以外ではAutoCheckを有効にして使ったこと俺はないや ちなみにここにはfalse->trueの順(>>19の通り)と書いてあるが、
これって準仕様書の扱いになる?
(URLは長すぎて切りましたので1行に繋いでください)
https://books.google.co.jp/books?id=sygW0iEw2zkC&pg=PA217&lpg=PA217&dq=.NET+
radiobutton+CheckedChange+event+order&source=bl&ots=A3ndItBpMH&sig=BHLCZLbBQIkAq_Gzq37viy_nGW8&hl=
ja&sa=X&ved=0ahUKEwjTx4zLhrvTAhVLabwKHaQ-AoMQ6AEIYzAH#v=onepage&q=.NET%20radiobutton%20CheckedChange%20event%20order&f=false >>20
いや普通はAutoCheckはtrueで使うだろ。規定値もそうだし。
順に依存しないコードにも出来るが、
これまで順が保証されていたつもりで書いているから
全RadioButtonのハンドラを確認しないといけないんだな。
(というかこのコメントだと逆順のところが大量にありそうな気がして怖い)
とりあえず確認したいのは、「順が保証されているか」「昔からか」だね。
ダメならダメで書き直すけど。
一般的に(他環境でも)RadioButtonのイベント順は保証されている(と俺は思っている)ので、
特に悪い使い方でもないとは思うのだが。 >>22
まあ議論するつもりも俺のやり方をごり押しするつもりもないけど、
本来ビューはあくまでモデルの状態を表示する表示器でしかないはずで、
AutoCheckのようにビューがビュー自身でどの項目がcheckされるかを決めるような機能は
ちょっと問題だと思うよ。 >>23
いやそれは君の方がおかしいよ。
RadioButtonは「一つしか選択されない」というものだから。
というか、UIとしてはそういう使い方しかしてはいけない。
だからそれを自動的にやらせるプロパティがデフォでONになってる。
そして通常はイベント順が決まっているので、
サンプルコードでもCheckedを見ろ、ということになっている。
それを手動でやることも出来るけど、コードの無駄でしょ。
MVC原理主義的には認められないのかもしれないけど。
君はテキストボックスの入力文字も
xterm等のターミナルみたいにモデルと通信すべきだとか言うのかい?
それはいくら何でもやりすぎでしょ。
ラジオボタンのAutoCheckもそれだよ。
多分、AutoCheckを切る使い方の方が少ないと思うよ。
HTML(JavaScript)ではそもそも切れないし。(俺が知らないだけかもしれんが)
.NETは機能が多いけど、使いもしない機能が多いのも事実。
なおJavaも多分AutoCheckに該当する物はないと思うが、
いかんせんドキュメントが見にくくてよく分からん。
https://docs.oracle.com/javase/jp/6/api/javax/swing/JRadioButton.html
ただ、良い悪いはさておき、仕様として順を保証してないんだったら修正するしかない。
.NETの仕様書ってMSDNだよね?
書いてないって事は保証無しなのかな?
まあ知ってる人居たらお願いします。 C#2008とIpython2.7を使用しているが、使い分けが不自然
GUI=C#,CUI=Ipython
としておりすが、恩恵を受けている感じがしません
どの様に使えば、もっとも、良いでしょうか? >>19
保障ってどういう意味?
仕様書に明記されていない事は実装依存で保障されてないわけだが
いまだかつてそのような仕様が明記された資料はみたことないけど
そもそもイベントって
発行した順にイベントハンドラが実行される保障や
複数のイベントハンドラを一つのイベントに登録したときにイベントハンドラの
登録順に実行される保障なんてあったか? >こちらの環境(.NET3.5と.NET2.0の両方)で上記順であることは確認したのだけど
これはあかん
ダメなパターンや
論理的に物事を考えられない思考やで >>27
デバッグビルドとリリースビルドでイベントの前後関係が違ってバグるとかたまにあるな。 >>27-30
このスレも急にゆとり汚染で劣化しててびっくりだわ。
お前らってそういうところあるよね。
事実かどうかではなく、そう思うかどうかが全てだという。
>>27
そのレスには俺ですら知っているほどの明確な間違いを含んでいるけど、
詳細は言わないことにするよ。
俺はゆとりは死んで欲しいと思っているから。 >>31
決まっていない事実は全て「偶然」
物事を演繹的に考えられない奴はネットワーク機器でも弄ってたほうが幸せになれるよ
煽りじゃなく向き不向きの問題 仮に現環境で動いても仕様として明記されてないちょっとしたバージョンアップで狂うかもしれん内容に依存した実装なんてしたくない >>31
ゴミは減らず口叩いてないで死んでろよ
魚の餌にでもなってろ 外野だけど、
RadioButton コントロールは、
同じグループ内の他のオプションボタンと同時にオンにすることはできません。
その上で、RadioButton.CheckedChanged イベントは、
Checked プロパティの値が変更された場合に発生します。
ただ、イベントハンドラ内でイベントハンドラが呼ばれる事を否定していないので、
例えば、RadioButton.CheckedChanged内で意図的にChecked プロパティをtrueに
変更したりすると、
RadioButton.CheckedChangedの処理中に別のRadioButton.CheckedChangedが呼び
出されます。
だから、false→trueのように見えるけど、
この点は注意しろよって事なんでしょう
とエスパ− JSON文字列のDeserializeで時々エラーが出ます。
原因は、JSON文字列の変換後にList<string>になる事を想定しているのですが、
たまに要素が一個だけ持つJSONが来るのでそれはListに出来ないからのようです。
場合を分けるしかないですか? 文字列想定してるのに文字が来た。
みたいな事?
じゃあ、文字が来たら一文字の文字列にすればおk。
場合分けしかないですか?って、それで解決するのに何悩んでるの。 そのJSON出力してる奴を脅してお誂え向きな仕様にしてもらえ >>39
デシリアライザーが気を利かせて要素一個のList<string>に変換してくれれば良いのですが。誰か作ってくれませんか? JSON使った事ないから知らんが、要素一個(文字列ではなく文字)だったら.toString()ってすりゃ済む話かと思ったんだが、違うのん? >要素が一個だけ持つJSONが来るのでそれはListに出来ないからのようです。
ここが曖昧、そして重要
そもそもデシリアライザは何を使ってるん? window.client.mouse.pointにアクセスしたい変数があり、その型が
struct Point {int x; int y;} // publicは省略
のとき
c++であれば
Point &p = window.client.mouse.point;
で参照を持ってきてpに代入をするとwindow.client.mouse.pointの値も変わるように出来ますが、c#で同じようなことをするにはどうしたら良いのでしょうか? >>44
変数はunsafe指定でポインタとしてしか宣言出来ない。
関数の引数ならRef付ければ参照得られる。 できません
C#は、関数型言語になりたがっているので、
今後もエイリアスに相当する機能は実装されないでしょう ありがとうございます
unsafeでやることにします ふつうに
ref Point p = ref window.client.mouse.point; >>37
そりゃJSON送ってくる奴がバグってるだろ
その要素は文字配列だって定義してるなら、
JSON配列の中身が
1個なら hoge : ["fuga"]
2個なら hoge : ["fuga","fuga"]
という形になるはず。
1個の時 hoge : "fuga"
で来るならそれは不具合ってやつだ イントラネット上のTCP/IP通信に関する質問なんですが
ネットワーク上に「A,B,C」の3つのPCがあるとして、例えば
「A→B」「B→C」「C→A」「A→B」のようにデータのやり取りをしたいといった場合
(同じデータを渡すのではなく、BはAからの受信があったらある処理を実行させ
その結果をCに渡し、Aに処理内容を返す。CはBから渡された結果で別の処理を実行し
処理内容/完了をAに通知する。Cからの完了通知を受けたAはまたBに処理の実行通知を出すといったような)
それぞれのPCのアプリケーションに実装するのは、どういった感じになるでしょうか。
今までにこういったことをしたことがなく色々調べてはみましたが
この場合はサーバー?クライアント?となったりでいまいちピンとこず理解がなかなか進みません。。
何か解かりやすいアドバイスや今時のやりかたを教えて頂けないでしょうか
ちょっと何言ってるかわからなかったらすみません >>54
サーバーを1人決めて、仕様を満たすように作るだけ >>54
同期しようとするとカオスになるのでメッセージキューを使うのがいいと思う
AMQPとか >>56
サーバーを1人確定すれば並列になりそうにない仕様なので
キューはいらんような気がする >>52
そんなことはわかっててそうは言っても送信側には手を入れられないとかの話だろ
エスパーしろとまでは言わんけどちょっとは察しろよ >>54
そのままプログラム化するだけだと思うが
問題は最初のきっかけはどうするかとか途中でエラーになった時にどう回復するかだと思う
そういう意味で >>55 のようにサーバー決めてそいつが管理するように作った方がトラブルになりにくいしトラブっても調査や復旧が簡単
>>56 はメッセージキューって言いたいだけだろ >>54です
レスくださった方々ありがとうございます
頂いたアドバイスでもう一度考えてみたいと思います
ちなみにイントラネット上であれば開いたソケットはアプリを閉じない限りクローズする必要はないでしょうか
あとは仕様的に同期式でいけそうな場合でもポーリングなどはせずに非同期のイベント通知などで設計するのが普通でしょうか >>60
とりあえずtcpのサンプルでも貼り付けて実行してみなよ >>60
> ちなみにイントラネット上であれば開いたソケットはアプリを閉じない限りクローズする必要はないでしょうか
当然だけどリッスンポートは待ち受けで開いたまま
コネクトする側は必要なくなったら閉じるのが普通 オブザーバー、発行・購読
中央管制塔ありのメディエイター
メッセージキュー >>61>>62
ありがとうございます
もう少しサンプルを調べて勉強してみます C#って言語とランタイムの性能はいいけどエコシステムが貧弱だな 最近はNuGetもかなり充実したけどJavaにはさすがに到底敵わない なんで叩かれてるのか知らないけど、Mavenリポジトリと言えば満足? >>71
Web系はやっつけだろうが早くリリースするのが至上命題だからテストを自動化しないとカオスになる クラスのメンバーの型を動的に変更するなどは可能ですか?
例えばMyClassのメンバーに
public string name { get; set; }
が有るとして、それを一時的に
public List<string> name { get; set; }
に変えるなど可能ですか? >>74
できない
何のためにそんなことをしたいのか public string|List<string> name { get; set; }
じゃ駄目? >>74
そのメンバーに色々な型のデータを突っ込みたいなら dynamic 型を調べるがよろし >>76
ありがとうございました。うまく行きました。
こんな手法があるんですね。 あっTypeScriptと勘違いしてた
C#じゃ出来なかったわ
すまん いつどこからアクセスするかわからないプロパティの型を可変にする意味は何?
実際バグ出したいだけだろ? 静的に型付けされてるメンバーを動的に変更することは出来ないに決まってるねw
逆に出来たら困る
なんか静的に型付けされているってことの意味が分からない人が時々いるよね
型Bと型Cの両方を受け入れるプロパティが欲しいならプロパティーの型を共通のベースクラスAにして、
プロパティの値はプログラマの責任で適切にキャストして使うしかない
あとはBとCの間で相互に暗黙変換できるようにするとか 初心者は制約があるより自由にかけるほうが良いと思う時期があるものさ
問題があった時にどこからでもさわれたほうが対処しやすいからフィールドは全部publicにしたほうがいいとかね class A
{
public int i;
public virtual void storeNumber(int arg){ i = arg; }
}
class B : A
{
public new int i;
public override void storeNumber(int arg) {
base.storeNumber(arg);
i = arg; }
}
A typeA = new B();
typeA.storeNumber(1);
System.Console.WriteLine(typeA.i); //1
B typeB = (B)typeA;
System.Console.WriteLine(typeB.i); //1
typeB.storeNumber(2);
System.Console.WriteLine(typeA.i); //2
System.Console.WriteLine(typeB.i); //2
new キーワードのメンバは変数の型で参照先が決まると書いてあったんですが
A型の変数から呼び出しても、オーバーライドしたクラスBのメソッドから代入すれば
new が付いてるint i でも値を代入できるということでいいんでしょうか? >>91
ありがとうございます。オーバーライドとbaseのことを調べてコード書いてたら
これでひっかかってたので助かりました。 隠蔽した本人から隠蔽後のメンバーじゃなくて
隠蔽したはずのベースクラスのメンバーが見えるなら何のための隠蔽よww
まあでも、どうせ隠蔽なんてまず使わないw
俺が使ったのはたぶんWindows Formのコントロールをカスタマイズするときに
virtualになってないメンバーを苦し紛れになんちゃってオーバーライドする時ぐらいだ 隠蔽は後から他の奴が基底クラスに同一シグネチャのメンバを追加しやがったときに
派生クラスが壊れないようにするための仕様だよ
積極的に使うものではない
当時のMSは極度の互換性パラノイアに陥っていたため、C#はバージョニングに関しては異常に神経質設計されている ヌル許容のdatetimeだとyear関数とか使えないんですか?
入力必須じゃない項目なので困っています。 ヌル許容のdatetimeってわからない。.NETのは構造体なのに 大分前からヌルが基本的に無いintとかにヌル入れられるヌル許容型ってのがあるが。。。
int? x = 123;
int? y = null; stringですら?付けてstring?にしようという時代に
細かいことをごちゃごちゃと stringは参照型だから元からヌル許容してたのに、なぜヌル許容型をわざわざ?
浦島太郎で申し訳ないが説明頼む。 ■ このスレッドは過去ログ倉庫に格納されています