ふらっと C#,C♯,C#(初心者用) Part138at TECH
ふらっと C#,C♯,C#(初心者用) Part138 - 暇つぶし2ch724:デフォルトの名無しさん
18/07/18 07:35:29.71 604NWUGLd.net
一時的にスリープのように任意のスレッドの処理を停止させて
別スレッドがある処理をしたら停止スレッドが動き始めるような形を作りたいです
waitforsingleobject以外に実現方法ありますか

725:デフォルトの名無しさん
18/07/18 07:37:13.37 gGGdDmmqd.net
>>693
なぜそんなことしたいの?

726:デフォルトの名無しさん
18/07/18 07:40:12.26 604NWUGLd.net
>>694
Aスレッド、Bスレッドがあって
Aスレッドはたまっているリクエストを非同期で投げ続けています
リクエストは一つずつ送らないといけない制約があるため
その応答が来るまでAスレッドを停止させたいです
応答というのがBスレッドの処理です

727:デフォルトの名無しさん
18/07/18 07:51:29.32 gGGdDmmqd.net
>>695
普通にasync/awaitじゃだめなの?

728:デフォルトの名無しさん
18/07/18 09:20:45.30 W2UhJLr+0.net
待機するAスレッドがUIスレッドとかいう状態でもなければ
それこそ関数直接コールでも良さそうなもんだけど

729:デフォルトの名無しさん
18/07/18 10:14:35.95 IWAo5nUlp.net
じゃあセマホ使えよ。

730:デフォルトの名無しさん
18/07/18 12:17:19.01 TKyRL/+ma.net
A案:リクエストのキューを投げる側ではなく受ける側に持たせる
B案:リクエストを投げるメソッドのデリゲートのキューをリクエストを受ける側に持たせる

731:デフォルトの名無しさん
18/07/18 13:53:18.95 imuZ+lX20.net
会社クラスを作りインナークラスで部署クラスを作ったのですが、インナークラスの使い方として間違っていないでしょうか
なんかMS意図と違う使い方をしてる気がしておりまして

732:デフォルトの名無しさん
18/07/18 14:21:30.22 JHZwBCBgM.net
間違いです

733:デフォルトの名無しさん
18/07/18 14:39:45.10 zONoZYnW0.net
IT業界は部署ごと社外に出向させられるとか日常茶飯事ですからね。

734:デフォルトの名無しさん
18/07/18 19:00:56.71 9N0yBnKk0.net
listviewを使って画像をドラッグした位置に挿入できるようなものを作りましたが、サムネイル表示(ViewプロパティをView.LargeIconに設定)だと移動後に一番後ろに来てしまいます
、どうすれば自由に画像を入れ替えれるのでしょうか?

735:デフォルトの名無しさん
18/07/18 19:50:12.60 yFSY1wbO0.net
>>692
>1000行なんて時には1日で書く程度のアプリ10本作ったところで…
これも内容によるけどな
10本作る間に誰に見られても恥ずかしくないコードが


736:書けるようになれば…



737:デフォルトの名無しさん
18/07/18 21:41:28.47 ojmeEx4e0.net
>>704
内容にもよるんだろうけれど、きちんと動くプログラムを10本完成させたっていうのであれば、それなりに評価してよいと思う。

738:デフォルトの名無しさん
18/07/18 21:49:23.42 GTM6kR3M0.net
仕事の山越えたからと社内文章読んでたら我が社のコーディング規約にvarとLINQ禁止とデカデカと書いてあってて笑ったwww

739:デフォルトの名無しさん
18/07/18 21:53:50.99 iepCQJFn0.net
就職ガチャ失敗おめでとうございます

740:デフォルトの名無しさん
18/07/18 22:21:17.43 ptS24Bkdd.net
>>706
LINQ禁止ってラムダ式使ったらだめってこと?

741:デフォルトの名無しさん
18/07/18 22:30:15.87 MKYFu03e0.net
varだめってリテラシーならラムダもダメだろうね

742:デフォルトの名無しさん
18/07/18 22:41:34.30 62X+9Moaa.net
短いコードのアプリでもちゃんと一般人の使用に耐えうるようになってるならいいだろう
機能的には十分でも無秩序にボタンが並んでるアプリは見ててつらい

743:デフォルトの名無しさん
18/07/18 23:09:23.95 /cNHsX3ta.net
コントロールそこそこおいたまともなアプリなら1000行じゃおさまらんやろ

744:デフォルトの名無しさん
18/07/18 23:29:19.34 p8keSf810.net
>>706
C#の公式コーディング規約に真っ向から対立www

745:デフォルトの名無しさん
18/07/18 23:39:58.45 rt2OOdjJ0.net
ラムダ式禁止とかC#使う価値半減だな

746:デフォルトの名無しさん
18/07/18 23:43:15.56 dMzTHkZAM.net
λ縛りはBダッシュ縛りマリオぐらいキツイ

747:デフォルトの名無しさん
18/07/18 23:46:14.58 L7ofGWBt0.net


748:デフォルトの名無しさん
18/07/19 00:18:15.44 mgU85F4C0.net
varってスコープが決まってたりよく使うもんだと思ってるんだけど
違うん?
あとコンパイル時に推論されるから実行速度には影響ないって考えていいの?

749:デフォルトの名無しさん
18/07/19 00:29:07.38 iwebbGhU0.net
>>716
明示的に型を示しても実行速度は変わりません

750:デフォルトの名無しさん
18/07/19 00:29:37.74 mgU85F4C0.net
>>717
ありがとうございます

751:デフォルトの名無しさん
18/07/19 00:34:23.22 4jMcHp760.net
var myTable = new Dictionary<string, string>();
myTable.Add("Hokkaido", "Sapporo");
myTable.Add("Iwate", "Morioka");
myTable.Add("Miyagi", "Sendai");
//*1
var b = myTable.ContainsKey("Iwate");
if (b == true)
{
      //*2
var s = myTable["Iwate"];
MessageBox.Show(s);
}
Dictionaryから特定の要素を探して、あれば表示するんですが
この*1 *2 をLINQを使って1行にしたいんですが、どうすればいいですか?

752:デフォルトの名無しさん
18/07/19 00:38:57.36 5TJBBc7u0.net
継承について
スーパークラスAに始まり
class B : A
class C : B
class D : C
となった場合、
Dクラス内でAやBのクラスのフィールドやメソッドをを使いたくなった場合には
それぞれをインスタンス化をすれば使えると思いますが、
継承されていない場合はどうすれば良いのですか?
例えば、
スーパークラスX
class Y : X
class Z : Y
とい場合、class Aのメソッドやフィールドを使いたくなったときは、
どうやってクラスAを持ってくるのでしょうか?
継承をしなくても、そのクラスのメソッドやフィールドを持ってくる方法はありますか?

753:デフォルトの名無しさん
18/07/19 00:46:06.47 9fGOJ2HHa.net
コンポジション
ZのフィールドやプロパティにAをもたせるだけ

754:デフォルトの名無しさん
18/07/19 00:56:15.63 OslD0F820.net
>>719
LINQ は集合に対して使うものなので、その例だと必要ない
if (myTable.TryGetValue("Iwate", out var s))
{
 MessageBox.Show(s);
}
対象が�


755:。数あるならこう var list = new[] { "Hokkaido", "Iwate", "Tokyo" }; var q = list  .Where(x=> myTable.ContainsKey(x))  .Select(x=> myTable[x]); foreach (var s2 in q) {  MessageBox.Show(s2); }



756:デフォルトの名無しさん
18/07/19 01:05:12.94 EPnya5cJa.net
>>719
LINQ全く関係ないけど比較的新しいC#ならこう書ける
if (myTable.TryGetValue("Iwate", out var s)) MessageBox.Show(s);
どうしても単一ステートメントにしたいなら
myTable.TryGetValue("Iwate", out var s) ? MessageBox.Show(s) : DialogResult.None; とか
(myTable.TryGetValue("Iwate", out var s) ? (Action<string>)(x => MessageBox.Show(x)) : (Action<string>)(_ => {}))();
とか書けなくはないけど俺ならこんなの書いてきやがったらコードレビューで突き返す

757:デフォルトの名無しさん
18/07/19 07:22:53.40 Y653MTcJd.net
>>696
awaitでは上手く実現できなさそうな構造でした
URLリンク(msdn.microsoft.com)(v=vs.110).aspx
monitorクラスを使って実現できそうだなとなりました
ただこれのシグナルを投げるpulseとpulseallの違いがよくわかりません
pulseは変数で渡したオブジェクトのスレッドを、pulseallは渡すオブジェクトとか関係なくwaitで止まってるすべてのスレッドを動かす?

758:デフォルトの名無しさん
18/07/19 07:52:34.10 pmdFJ8GPd.net
>>724
>awaitでは上手く実現できなさそうな構造
なぜ?

759:デフォルトの名無しさん
18/07/19 07:53:35.73 EPnya5cJa.net
>>724
つまりProducer-Consumerだろ?
まさにBlockingCollectionのユースケース

760:デフォルトの名無しさん
18/07/19 10:16:19.48 cAPUq0O30.net
Aそのものは非同期(バックグラウンド)で動く必要があるとして
そもそもBが非同期で動く必要性がわからん
かならず応答きてから次をよぶんだろ?

761:デフォルトの名無しさん
18/07/19 11:39:51.48 wWZN809Va.net
むしろ一番の疑問は、
>リクエストは一つずつ送らないといけない制約がある
のであれば、キューを持つべきなのはリクエストを送る側ではなく受ける側なんじゃないか、
なぜリクエストを送る側に受ける側の都合に合わせる負担をさせるのか、
ってことだと思うけど、まあ話が曖昧過ぎてよくわからんね。

762:719
18/07/19 12:02:04.85 4jMcHp760.net
>>722
自分のコードだと野暮ったくて古い感じがしたんですが
out var なるものを使ってすっきりさせるんですね
>>723
最近、ラムダ式やLINQを始めたんで↓みたいにメソッドチェーンで繋げたかったんですが
これだとやりすぎなんですねw
>> myTable.TryGetValue("Iwate", out var s) ? MessageBox.Show(s) : DialogResult.None; とか
>> (myTable.TryGetValue("Iwate", out var s) ? (Action<string>)(x => MessageBox.Show(x)) : (Action<string>)(_ => {}))();
>> とか書けなくはないけど俺ならこんなの書いてきやがったらコードレビューで突き返す

ありがとうございました

763:デフォルトの名無しさん
18/07/19 12:23:58.43 apArmWopd.net
見やすくしたり行数減らす為の機能なのに一文に無理やり詰めたら見づらいだろうしな
LINQ使わなくても
;で終わらせた文を一列にずっと書き続けてたらなんだこいつってなるだろうし

764:デフォルトの名無しさん
18/07/19 12:45:19.73 7c8TqsUTM.net
MQ使えよ

765:デフォルトの名無しさん
18/07/19 13:14:15.48 kD3lyTPJr.net
varのメリットってなに?

766:デフォルトの名無しさん
18/07/19 14:01:22.48 goaSBPuMd.net
>>732
定期的にこのスレを荒らすメリットがある。

767:デフォルトの名無しさん
18/07/19 14:35:28.55 3tSlXwR10.net
10年で1スレも消費できないムラダ厨がまた初心者スレで暴れてるのか。

768:デフォルトの名無しさん
18/07/19 15:40:49.42 afTcWGfVp.net
>>728
送る側で待たないと仕事を溜め込んだ受け側が最悪死ぬか無視する様になるぞ。

769:デフォルトの名無しさん
18/07/19 16:09:05.04 wWZN809Va.net
>>735
意味わかんないよ
キューが満杯ならエンキューできないだけ。
そして、キューが満杯になるような事態が起こるかどうかは、キューを送る側受ける側
どちらが持つかという設計の問


770:題とは何も関係がない。 送り側が持てばそんな事態は起こらない、などとはまったく言えない



771:デフォルトの名無しさん
18/07/19 16:13:58.11 GVBKISLp0.net
共有メモリにFIFO作りたいのでサンプルコードください

772:デフォルトの名無しさん
18/07/19 19:27:54.48 FFg3mKaqa.net
>>737
基本的にスレチだな

773:デフォルトの名無しさん
18/07/19 20:33:54.32 AM4tPqCx0.net
>>737
マルチ乙

774:デフォルトの名無しさん
18/07/19 20:34:49.77 m5MPu7YPM.net
バックグラウンドジョブをメモリに置いて管理するとクラッシュした時につらいのでやめてください

775:デフォルトの名無しさん
18/07/19 23:06:52.57 afTcWGfVp.net
>>736
少なくとも送る側が待てばたまらないし、待たすからには大元まで遡って待たせることが出来る。
受け側で貯めちゃうと、そんなコントロールすらできない。

776:デフォルトの名無しさん
18/07/19 23:10:07.57 3HXgvZll0.net
>>737
MemoryMappedFileクラスで共有メモリを作って、そこにリングバッファを作れば良い。
サンプルコード? と言う名の丸投げは知らんw

777:デフォルトの名無しさん
18/07/19 23:16:09.86 GVBKISLp0.net
>>742
ありがとうございます

778:デフォルトの名無しさん
18/07/19 23:24:45.38 OO5CyzUia.net
>>741
何を言ってんの。
ちゃんと自分の頭で考えて言ってる?
キューの容量が100だとする。
リクエストが100まで溜まってしまうかどうかは、キューをどちらが持つかと関係ないでしょ。
スループットはリクエストの処理能力で決まるんであって、キューをどっちが持つかで決まるんじゃない。
当たり前でしょ。
送る側が待てばたまらない?
それは受ける側がリクエスト拒否したらたまらないと言ってるのと同じ
君の世界じゃ、バケツリレーの余分なバケツの置き場所を送り元におくか送り先に置くかで
バケツの輸送能力(単位時間あたりの送れる水の量)が変わるの?
変わるわけがないでしょ
頼むよマジで

779:デフォルトの名無しさん
18/07/20 00:04:31.35 K42rKqTp0.net
>>721
ありがとうございます
すみません、コンポジションというのはどういう手法なのでしょうか?
調べてはみたのですが解説しているサイトが見つからなくて・・・

780:デフォルトの名無しさん
18/07/20 00:15:51.43 v/t2rOLx0.net
>>745
クラスのインスタンスをメンバ変数などに設定して持つ

781:デフォルトの名無しさん
18/07/20 00:16:43.45 Cn0RK5hEM.net
配置計画
GOFはそちらを優先して説明しているが

782:デフォルトの名無しさん
18/07/20 01:07:34.53 AsTO3swr0.net
持つと待つ
混ざりすぎじゃねぇの?
待つって言いたいんだよね?

783:デフォルトの名無しさん
18/07/20 06:49:01.24 rjUp7fMrM.net
きたです
URLリンク(i.imgur.com)

784:デフォルトの名無しさん
18/07/20 09:57:40.63 KW0DEJnu0.net
>>748
>>744の文中の持つは持つで間違ってないと思う

785:デフォルトの名無しさん
18/07/20 10:43:27.30 aSukBuZjp.net
>>744
だから、貯め無い様にするには、送る側、更にそこに送る側、更に大元の送る行為を辞めされはいいって話。
わかる?
通信のフローコントロールの話と同じなんだよ?

786:デフォルトの名無しさん
18/07/20 10:47:52.01 j2kgPlBya.net
>>751
まだ言ってるのか。
君の世界では
>送る側、更にそこに送る側、更に大元の送る行為を辞めされはいいって話
これが可能かどうかはリクエストのキューをどちらが持つかに依存するのか。
キューをリクエストの受け側が持ったらそれは出来ないのか。
意味が分からないよ
何が
>通信のフローコントロールの話と同じなんだよ?
だw
馬鹿過ぎて笑える

787:デフォルトの名無しさん
18/07/20 10:50:07.22 GHEf7JCUM.net
よそでやってくんねーかなクソカス

788:デフォルトの名無しさん
18/07/20 10:50:53.38 aSukBuZjp.net
おまえ、目悪過ぎて呆れるわ。
持つなんて一言も言って無いだろw
待つだw マツ。
キューをどっちが持ってるかなんて話はしてない。

789:デフォルトの名無しさん
18/07/20 11:06:3


790:9.88 ID:KI/QuNIvM.net



791:デフォルトの名無しさん
18/07/20 11:16:02.27 aSukBuZjp.net
>>755
まあ普通は受け取る側に郵便受けが無いと受け取る人はいちいち局留めの郵便を受け取りに行かなきゃならないんだけど、まあ、それはどちらでも機能するからあんまり争点にはならないけどね。

792:デフォルトの名無しさん
18/07/20 13:07:56.71 aSN8UD58d.net
バケツリレーの喩えでもスループットは変わっちゃうんだよな。
受け側に送信側が送信する総量より大きいバッファを持てば、スループットは水の入ったバケツを運ぶ時間に依存するだけで済む。
キューがそれより遅ければバケツを引き渡すために時間が余計にかかるわけだから、スループットは落ちる。
送信側にキューを持ったところで、送信側は送信処理に対して同期的に処理しないだけで済むだけで、そのキューからの送出がどんどん遅れるだろう。受け取ってくれないなら。

793:デフォルトの名無しさん
18/07/20 13:54:59.01 gB9GbXMP0.net
>>693,695「スレッドを協調して動かしたいです、制約あるんで」
凡人の回答「○○使えよ」
天才の回答「制約が悪い」

794:デフォルトの名無しさん
18/07/20 21:28:53.81 OAXfUTo30.net
c=(a*a+b*b)
c=System.Math.Sprt(c)
これでcの平方根を出そうとしたのですがSystem.MathにSprtの定義がありませんと出ます
sharedevelopを使っています

795:デフォルトの名無しさん
18/07/20 21:32:35.58 XkM+nwLwM.net
SQRT

796:デフォルトの名無しさん
18/07/20 21:35:00.80 6RzmSKAyM.net
エディタの不具合だろ
SharpDevelopなどという化石は今すぐアンインストールしてVSかVSCodeを使え

797:デフォルトの名無しさん
18/07/20 21:44:14.53 XkM+nwLwM.net
平方根の綴りが違う

798:デフォルトの名無しさん
18/07/20 22:17:34.54 7jIkQpVM0.net
square rootだからねぇ

799:デフォルトの名無しさん
18/07/21 00:28:32.93 WdWG9X6t0.net
ありがとうございます 解決しました

800:デフォルトの名無しさん
18/07/21 06:52:38.43 HGZKU0EK0.net
スパート!

801:デフォルトの名無しさん
18/07/21 13:53:42.54 aw31/LTY0.net
>>754
もともと
>キューを持つべきなのはリクエストを送る側ではなく受ける側なんじゃないか、
にたいして
>送る側で待たないと仕事を溜め込んだ受け側が最悪死ぬか無視する様になるぞ。
ってレスしてるのが発端なんだが
どうでもいい良いしよそでやって欲しいけど

802:デフォルトの名無しさん
18/07/21 14:14:10.21 IqGIA9LU0.net
話題が一変してんのにわざわざ掘り返すなよw
言ってる事とやってる事が矛盾してんぞw

803:デフォルトの名無しさん
18/07/21 15:42:07.60 8fBGWCJL0.net
レスバトルって奴だろ
最後に言及した方が勝ちなんだって
これ見るといつも思うが、こういう馬鹿には自分自身を見る自意識がないのかね

804:デフォルトの名無しさん
18/07/21 20:00:10.16 rsQP0F780.net
たすけて!
Parallel.ForEachの中でデータグリッドの内容を更新してるんだけど
途中で爆発します
データグリッド全体に✕って出て非表示になる
データグリッドの更新処理はlockで囲ってても競合は起きちゃうものですか?

805:デフォルトの名無しさん
18/07/21 20:05:25.49 CBiNHREt0.net
まず原因を切り分けろ
Parallel.ForEachを外しても爆発するか確認するんだ

806:デフォルトの名無しさん
18/07/21 20:07:27.16 rsQP0F780.net
>>770
パラレルの外出すと機能するけど
そうすると全処理終わってから一回しか更新されない…😌

807:デフォルトの名無しさん
18/07/21 20:08:57.28 gktKld7A0.net
>>771
UIはUIスレッドからしか操作出来ない
Parallel.ForEachの処理は別スレッドで実行される

808:デフォルトの名無しさん
18/07/21 20:10:43.13 BEEMYUE30.net
>>771
Action<TLocal> local


809:Finally の引数をとるオーバーロードを使ってみたらどうでしょう?



810:デフォルトの名無しさん
18/07/21 20:10:44.76 H6KFndt4M.net
>>768
君のレスを見るといつも思うが、こういう特徴のある口調のレスを繰り返す人には自分自身を見る自意識がないのかね

811:デフォルトの名無しさん
18/07/21 20:10:59.84 nH897ECr0.net
invokeするか、ContextにPostするしか無いんじゃないかな

812:デフォルトの名無しさん
18/07/21 20:22:09.68 3bWsh9tI0.net
>>774
>>774

813:デフォルトの名無しさん
18/07/21 20:22:10.55 //qCwfF7a.net
爆発w

814:デフォルトの名無しさん
18/07/21 20:24:00.77 rsQP0F780.net
>>772
>>773
>>775
Invokeでググりました
まさにこの疑問を解決するための機能でした
有難う御座います

815:デフォルトの名無しさん
18/07/21 20:35:04.73 BEEMYUE30.net
私は >>773 ですが Invoke について自分があまり良く分かってない気がしてきたので
詳しい方がいらっしゃったら教えてください
UIスレッドで Parallel.ForEach を呼ぶとUIスレッドをつかんだまま並列処理が実行されて、
その並列処理のスレッドで Invoke を使うとデッドロックしてしまう気がするのですが
実際はそういうことはないのでしょうか?

816:デフォルトの名無しさん
18/07/21 20:36:04.76 aw31/LTY0.net
マルチスレッドにしてInvokeしまくると結局パフォーマンスがガタ落ちしたりするがな

817:デフォルトの名無しさん
18/07/21 21:15:58.91 BEEMYUE30.net
>>779 です
WPF で下のようなコードを実行してみたらやっぱりデッドロックしてしまいました
Invoke はそれなりに慎重に使わないといけないみたいです
void Button_Click(object sender, RoutedEventArgs e)
{
  MessageBox.Show("このメッセージは必ず表示される");
  Parallel.ForEach(Enumerable.Repeat(0, 2), i => Dispatcher.Invoke(() => { }));
  MessageBox.Show("デッドロックするとこのメッセージは表示されない");
}
ちなみに Enumerable.Repeat(0, 2) の部分を変えると以下のような挙動でした
Enumerable.Repeat(0, 0) に変える → デッドロックしない
Enumerable.Repeat(0, 1) に変える → デッドロックする
new int[] { } に変える → デッドロックしない
new int[] { 0 } に変える → デッドロックしない
new int[] { 0, 0 } に変える → デッドロックする

818:デフォルトの名無しさん
18/07/21 21:16:52.59 1oayVCQs0.net
>>778
いいってことよ(´・ω・`)b

819:デフォルトの名無しさん
18/07/21 21:18:17.40 nH897ECr0.net
>>779
並列処理はUIスレッドではないスレッドで行われるよ。
いや、UIスレッドで行われるとは限らない、と言う言い方の方が正しいかな。
UIスレッドを掴んだままの意味がわからんが、挙動が謎なら、ブレークポイントつけて実行して、どのスレッドが何をしてるかを把握してはいかがだろうか。
今どのスレッドを使ってるかは表示されてるから。

820:デフォルトの名無しさん
18/07/21 21:20:54.98 nH897ECr0.net
WPFかあ

821:デフォルトの名無しさん
18/07/21 21:25:21.58 VW1YO4fA0.net
Windows版VSCodeで、monoを構文解析用のコンパイラとして指定することってできないのかな?
Unityの.Net4.0用プロジェクトで、数ヶ月前までは、.Net3.5用のSystem.Data.DLLを読み込んでくれたのにさあ
VisualStudioを更新したら構文解析用のコンパイラが変わったのか、古い.net3.5用のDLLを読み込んでくれなくて赤波線だらけになっちゃったぜ
4.0用のDLLもあるわけだけど、それを入れるとUnityのmonoの方でなぜかエラーを起こすし・・・どうしたら良いものか・・・・

822:デフォルトの名無しさん
18/07/21 21:33:11.65 BEEMYUE30.net
>>783-784
レスありがとうございます
> いや、UIスレッドで行われるとは限らない、と言う言い方の方が正しいかな。
>>781 で new int[] { 0 } だとデッドロックしないあたり、まさにそんな感じですね
> WPFかあ
>>769 でデータグリッドと書かれていたので、
今の Windows フォームなら DataGrid ではなく DataGridView かなと思って
WPF の方で試してしまいました(汗
Windows フォームだと挙動が変わるならそれも知っておきたいので
今からそっちでも試してみ


823:ます



824:デフォルトの名無しさん
18/07/21 21:36:50.95 BEEMYUE30.net
Windows フォームで試してみたのでご報告を。
以下のコードを実行してみた結果、やっぱりデッドロックしてしまいました
Enumerable.Repeat(0, 2) を変えたときの挙動も >>781 と同じでした
void button1_Click(object sender, EventArgs e)
{
  MessageBox.Show("このメッセージは必ず表示される");
  Parallel.ForEach(Enumerable.Repeat(0, 2), i => Invoke(new Action(() => { })));
  MessageBox.Show("デッドロックするとこのメッセージは表示されない");
}

825:デフォルトの名無しさん
18/07/21 22:26:34.46 rsQP0F780.net
えーわからん…
ちなみにフォームですビューです
つまりフォームアプリでParallel処理内でinvokeってそもそも悪手なんでしょうか
それともThread生成してその中でParallelすれば良かったり…?これはすごい破綻してる気がしますが
uiスレッドから切り離した他スレッドから安全にuiを制御するなんて考えが可笑しいんでしょうか

826:デフォルトの名無しさん
18/07/21 22:44:23.68 BEEMYUE30.net
>>788
あくまで私一人の考えですが・・・
[1] Invoke を使うと >>779 に書いたような理由でデッドロックするので
 Parallel.ForEach でUIスレッドを使いたいなら >>773 のようにすべき
[2] しかし、同じく >>779 に書いたように Parallel.ForEach はUIスレッドを
 つかんだまま並列処理を行うのでデータグリッドの更新処理だけ
 Parallel.ForEach から切り出してもほとんど同じなのでは?
 (一応 localFinally 中も他のスレッドは動けるので
   そこで更新処理を行う方がいい場合もあるかもしれない)
[3] 並列処理が必要なほど大きな処理を行うなら、
 一度UIスレッドを手放す選択肢も考えてみては?
ただ、Invoke がダメだと考えている人間自体が私だけのような気もするので
他の方の意見も聞いてみたほうがいいと思います
あと、[3] に関しては場合によりけりだと思うので、
具体的な処理内容を教えていただければ私の考えをお伝えしたいと思います

827:デフォルトの名無しさん
18/07/21 22:55:07.29 gktKld7A0.net
>>787
そのコードだと、button1_Click()がずっとUIスレッドを握ったまま。
だから、Parallelの別スレッドでInvoke()しようとしてもUIスレッドに遷移出来なくて固まる。

828:デフォルトの名無しさん
18/07/21 23:00:46.86 gktKld7A0.net
既に>>779に書いてあったね。その通り。

829:デフォルトの名無しさん
18/07/21 23:10:20.56 BEEMYUE30.net
>>790-791
レスありがとうございます
>>779 の考えで正しいのか不安だったのですがお陰様で自身が持てました
他に何かおかしなことを言ってしまっていたら教えていただけると嬉しいです
>>788
>>789 はレスとしてとっ散らかっている気がしてきたので一問一答で答えてみます
> つまりフォームアプリでParallel処理内でinvokeってそもそも悪手なんでしょうか
Parallel を UI スレッドで実行する場合は悪手というか、致命的だと思います
> それともThread生成してその中でParallelすれば良かったり…?これはすごい破綻してる気がしますが
それなら期待通りの動作にはなると思います。ただ、確かにあまりいい方法ではないと思います
> uiスレッドから切り離した他スレッドから安全にuiを制御するなんて考えが可笑しいんでしょうか
正しく Invoke を使えば問題ないと思います
しかし今回の件からもわかるように、Invoke を正しく使うのはなかなか難しいようです

830:デフォルトの名無しさん
18/07/21 23:21:21.79 R8KbBSh90.net
.Invokeではなく.BeginInvokeを使うのはどう?

831:デフォルトの名無しさん
18/07/21 23:30:54.97 BEEMYUE30.net
>>793
それって
> それともThread生成してその中でParallelすれば良かったり…?
よりも更にワチャワチャする気がするのですがどうなんでしょう?
ワチャワチャって具体的にどういうことなのか
説明を求められれば頑張ってみようと思いますが、
自分の考えがあっているかも、それをうまく説明できるかどうかも
自信がないので、詳しい方の意見を聞けると嬉しいです

832:デフォルトの名無しさん
18/07/21 23:41:01.32 //qCwfF7a.net
>>794
そんな難しい話じゃないっすよw
BeginInvokeは非同期に実行される、つまりキューにデリゲートを入れたらすぐに処理を返すので
Invokeのように自分で自分の終了を待機する状態に陥らない

833:デフォルトの名無しさん
18/07/21 23:43:41.94 rsQP0F780.net
>>792
有難う御座います
これで行けたので実装試してみます
void button1_Click(object sender, EventArgs e)
{
  MessageBox.Show("このメッセージは必ず表示される");
  Task.Factory.StartNew(() =>
  {
  Parallel.ForEach(Enumerable.Repeat(0, 2), i => Invoke(new Action(() => { })));
  }
  MessageBox.Show("デッドロックするとこのメッセージは表示されない");
}

834:デフォルトの名無しさん
18/07/21 23:55:52.12 BEEMYUE30.net
>>795
レスありがとうございます
おっしゃる通りBeginInvokeはキューにデリゲートを入れたらすぐに処理を返すので
次から次へとキューが入って大変なことになりそう�


835:E・・と思ったのですが、 そんなに心配することではないのでしょうか >>796 それで一応動くと思いますが、Parallel.ForEach が終わる前に 二つ目の MessageBox.Show の行に移るので注意してください ・・・というか、localFinally を使ったり更新処理だけを切り出したりはダメっぽいですか? ダメだと考えられた理由を教えていただければ何かアイディアを提供できるかもしれません



836:デフォルトの名無しさん
18/07/22 00:03:07.23 qjdpSLXF0.net
>>797
データグリッドビューは進捗状況を見るために更新していて
1行1スレッドで処理されて処理後にどう処理されたかをリアルタイム表示してます
ダメではなく単純に自分が分かってないだけです
この処理ならlocalFinallyが最適かもです
深く調べてみます

837:デフォルトの名無しさん
18/07/22 00:13:38.17 IU6x2eOV0.net
>>798
> データグリッドビューは進捗状況を見るために更新していて
> 1行1スレッドで処理されて処理後にどう処理されたかをリアルタイム表示してます
進捗状況の確認が必要なほど1行あたりの処理に時間がかかる理由は何でしょうか?
もしその理由が IO など、CPU 以外のところにあるのだとすれば、
Parallel.ForEach を使うこと自体を見直したほうがいいかもしれません
> この処理ならlocalFinallyが最適かもです
正直なところ、更新処理だけ切り出す方法よりも localFinally の方が
適切なケースはまれだと思います
ただ、localFinally の使い方がわかれば更新処理を Parallel.ForEach の外に
切り出す方法もわかると思うので、とりあえず調べてみて損はないと思います

838:デフォルトの名無しさん
18/07/22 00:23:24.78 qjdpSLXF0.net
>>799
圧縮ファイルを解凍して中のファイルを加工して再び圧縮し直す
これで1タスクです
1ファイル200MBほどで100ファイル以上処理することが多いです
圧縮解凍、加工は外部ツールを使用しててProcessStartInfoで処理されます

839:デフォルトの名無しさん
18/07/22 00:35:58.51 IU6x2eOV0.net
>>800
なるほど~
CPU 処理も IO もあって微妙なところですね
ちなみにその外部ツールはマルチスレッドを使うオプションはないでしょうか?
(例えば 7-zip.exe だと -mmt がそれにあたります)
もし外部ツールがマルチスレッドに対応してるなら、
並列処理はそっちに任せてしまうというのはどうでしょう?
または、外部ツールではなく SharpCompress のようなライブラリを使うことができれば、
C# によるより細かい制御も可能になると思います

840:デフォルトの名無しさん
18/07/22 00:37:18.94 gDKcX53ba.net
汎用的なものとは思えないし、動けばどうでもいいだろ
俺ならそういうのはいちいちGUI付けずにコンソールでやっちゃうな

841:デフォルトの名無しさん
18/07/22 00:45:55.06 IU6x2eOV0.net
>>800
それともう一つ、外部ツールを呼び出すのにデフォルトの ParallelOptions で
Parallel.ForEach を呼び出すのはさすがにまずいと思います
ParallelOptions 自体に MaxDegreeOfParallelism というプロパティがありますし、
ParallelOptions の TaskScheduler プロパティに以下のような自前のスケジューラーを
設定すればより柔軟な並列処理を実現できると思います
同時実行の程度を制限するタスク スケジューラを作成する
URLリンク(msdn.microsoft.com)(v=vs.100).aspx
>>802
それは確かにw
完成したソフトによって得られる利益よりソフトを作るコストのほうが大きくなってしまったら
意味がないですからね
(ただしソフトによって得られる利益には開発者のスキルアップも含まれる・・・と言ってみたりw)

842:デフォルトの名無しさん
18/07/22 00:48:52.21 qjdpSLXF0.net
>>801
7zip使ってます
スレチになるけど
mmtは一つの処理をマルチに実行するものではないでしょうか
圧縮形式は決まってなく複数あるので7zipを使用してます
zip rar lzh以外にも色々

843:デフォルトの名無しさん
18/07/22 00:51:33.52 qjdpSLXF0.net
>>803
タスクスケジューラー調べてみます良さそうですね
i7使用しててMaxDegreeOfParallelismは常に8で実行してます
8スレッドで画面カッチカチで処理してます
暴力です

844:デフォルトの名無しさん
18/07/22 00:54:31.49 IU6x2eOV0.net
>>804


845: > mmtは一つの処理をマルチに実行するものではないでしょうか その通りです したいことが「進捗状況を表示できるようにすること」と「並列化により処理時間を短縮すること」 だとすれば、それで問題ない(というかむしろその方が望ましい)の思うのですがいかがでしょうか?



846:デフォルトの名無しさん
18/07/22 00:59:41.83 IU6x2eOV0.net
>>805
MaxDegreeOfParallelism を使ってらっしゃるなら
とりあえず致命的にまずいことはないと思います
ただ、CPU だけじゃなく、同時に8つのファイルの読み書きを
求められる HDD さんの気持ちも考えてあげて・・・w

847:デフォルトの名無しさん
18/07/22 01:01:31.55 qjdpSLXF0.net
>>806
後続の加工処理もありエラー監視も含むので進捗知りたいです

848:デフォルトの名無しさん
18/07/22 01:03:03.89 SZ8yn9810.net
>>798
localFinallyよりasync/awaitの方が分かりやすいと思う。
private async void button1_Click( object sender, EventArgs e )
{
MessageBox.Show( "このメッセージは必ず表示される" );
await Task.Run( () =>
{
Parallel.ForEach( Enumerable.Repeat( 0, 2 ), i => Invoke( new Action( () => { } ) ) );
} );
MessageBox.Show( "デッドロックするとこのメッセージは表示されない" );
}

849:デフォルトの名無しさん
18/07/22 01:04:00.97 gDKcX53ba.net
makefile使えば?
数行のMakefile書いて make -j8 するだけだよ

850:デフォルトの名無しさん
18/07/22 01:04:22.38 qjdpSLXF0.net
>>807
解答先は8GBのRamディスクです
メモリに物理ファイルおいてでここで加工して再圧縮してその後HDDに移動させてます

851:デフォルトの名無しさん
18/07/22 01:18:41.37 IU6x2eOV0.net
>>808
Parallel.ForEach を使わなくてもそれはできると思うのですがいかがでしょうか?
>>809
確かにおっしゃる通りですね
後は好みの問題ですが、やはり私は1行ごとに Invoke するよりも
パフォーマンス的に有利な localFinally や更新処理の切り出しを推したいですw
>>811
なるほど!そうすれば外部ツールを使っても HDD へのアクセスだけ別に処理できますね
ただ、HDD へのアクセスを別にしようという意識をお持ちで、それだけのスキルもあるのなら、
外部ツールにこだわる必要はないのでは・・・という気もします
あと、メモリは HDD よりはずっと速いですが、CPU キャッシュとかの関係でやっぱり
8 個のファイルを同時に読み出すよりは1つずつの方が良いような気がします

852:デフォルトの名無しさん
18/07/22 01:27:28.49 IU6x2eOV0.net
>>809 >>812
いや、でも進捗状況を表示するとなると結局どこかで await は使うことになりそうですね
ただ私としては >>800 のような処理なら Parallel.ForEach は必要ないと考えていて、
foreach (ファイルのループ)
{
  foreach (進捗状況のループ)
  {
    await (進捗状況の更新待ち);
    (進捗状況を画面に反映);
  }
  (1ファイルの完了を画面に反映);
}
のような感じで十分だと思うのですが、どんなもんでしょうか?

853:デフォルトの名無しさん
18/07/22 01:35:51.92 eU7Qw5rc0.net
そんな処理速度気にするなら複数PC用意できたりしないのかな?
たぶん内製ツールだと思うけど、そういうのって長期保守とかしないならシンプルでさくっとやれる方向を模索したほうがいい気が…
研究開発兼ねてとかだったらいいんだけど

854:デフォルトの名無しさん
18/07/22 01:43:37.75 qjdpSLXF0.net
>>812
そうです、最も投げやすく勝手にマルチしてくれる便利なParallelさんって聞いて使ってるます
別の手段があればコレに拘ることはないと思ってます
>>813
cpuキャッシュとか考慮せずマルチ=高速って誤認識で走ってきて
その中で最適化してきたので
localfinally使用したときと
1ファイルの処理の差も検証してみたいと思います
>>814
ただの趣味なんですPC一台で
複雑でも効


855:果があれば試したいと考えています



856:デフォルトの名無しさん
18/07/22 01:44:34.84 qjdpSLXF0.net
ほな寝ます。詳しくありがとうございました!
もしかしたら明日もっとやべーかもです

857:デフォルトの名無しさん
18/07/22 01:59:21.48 J1Nh86LOM.net
var block = new ActionBlock<ZipOpParam>(
async (param) => {
await ExecuteZipOpAsync(param);
InvokeUpdateUi(param);
},
new ExecutionDataflowBlockOptions {
MaxDegreeOfParallelism = 8
});
foreach(var p in zipOpParams)
block.Post(p);
block.Complete();
await block.Completion;

858:デフォルトの名無しさん
18/07/22 03:07:13.11 IU6x2eOV0.net
>>815
> そうです、最も投げやすく勝手にマルチしてくれる便利なParallelさんって聞いて使ってるます
これは私も同じように認識しています
> cpuキャッシュとか考慮せずマルチ=高速って誤認識で走ってきて
これは場合によりけりだと思います
特に今回のように外部ツール側でマルチスレッドにできる場合はツールの呼び出し側では
余計なことをせず外部ツールに任せたほうが高速になる場合が多いと思います

>>817
C# で並列処理を行うならこれは一つの解決策になりそうですね
別の解決策として、新たに参照を追加する必要のない↓の方法とかどうでしょう?
var tasks = new List<Task>();
foreach (var param in zipOpParams)
{
  if (tasks.Count == 8) tasks.Remove(await Task.WhenAny(tasks));
  tasks.Add(ExecuteZipOpAsync(param).ContinueWith(
    _ => InvokeUpdateUi(param),
    TaskScheduler.FromCurrentSynchronizationContext()));
}
await Task.WhenAll(tasks);

859:デフォルトの名無しさん
18/07/22 09:28:10.63 e8tLYzcQ0.net
違うexeキックすれば終わりなんやで?

860:デフォルトの名無しさん
18/07/22 13:48:56.26 dLVAOvzX0.net
オブジェクト指向について勉強しようと思い、クラスを複数作って実行しようとしたら実行ボタンがプロセスにアタッチというよく分からない物に代わりビルドなども出来なくなってしまいました
どうしたら元に戻せるでしょうか

861:デフォルトの名無しさん
18/07/22 15:37:48.37 X/YKRg9/M.net
参考にした資料がそう(実行ボタンをプロセスにアタッチ)しろと書いているなら
その手法でトラブった時の解決法も資料に書いてあるのでは
提示されたくらいの情報でここで帰ってくる答えは
「ゴミは捨てて作り直せ」
「一旦オブジェクト指向についての記憶を消せ」
だと思う

862:デフォルトの名無しさん
18/07/22 19:34:11.94 dLVAOvzX0.net
このように実行ボタンがアタッチ…となりビルドも行えなくなってしまっています…
プログラムは「確かな力が身に付くc#超入門」から取っていて特にプロセスにアタッチに関する記述も無いので恐らく設定どこか変に弄ってしまったのかと思うのですが…
URLリンク(i.imgur.com)

863:デフォルトの名無しさん
18/07/22 19:59:19.28 zgYMpfBL0.net
>>822
ソリューションエクスプローラーで当該プロジェクトを右クリック→スタートアッププロジェクトに設定(みたいなやつ)を選択

864:デフォルトの名無しさん
18/07/22 20:02:21.74 2+gJNW3/0.net
>>822
言語じゃなくVisual Studioのスレで聞かないと
それはプロジェクトが読み込まれておらずソースだけ読み込まれている状態

865:デフォルトの名無しさん
18/07/22 20:13:04.82 dLVAOvzX0.net
>>823
やってみたのですがそれらしき項目がありませんでした…

866:デフォルトの名無しさん
18/07/22 20:13:36.52 dLVAOvzX0.net
>>824
なるほどありがとうございます vsのスレで聞いてきます

867:デフォルトの名無しさん
18/07/23 00:19:07.43 glq8mOZ10.net
revertしろや。意味もわからんだろうがな。

868:デフォルトの名無しさん
18/07/23 01:08:12.51 7plYbgct0.net
>>827
じゃあなぜそれを言ったのでしょうか…

869:デフォルトの名無しさん
18/07/23 02:22:37.56 UcAZ2Awl0.net
ナチュラルマウンティング

870:デフォルトの名無しさん
18/07/23 09:39:14.18 GAsLkYgIM.net
>>828
ググって勉強しろということだ

871:デフォルトの名無しさん
18/07/24 22:19:33.23 KA6Loe2t0.net
もしかしてASP.NETってJavaみたいなリッチで無料の拡張フレームワーク無いの?

872:デフォルトの名無しさん
18/07/24 22:26:36.90 9BkrBjXcd.net
>>831

ASP.NET自体が無料のフレームワークだろ

873:デフォルトの名無しさん
18/07/25 13:43:12.86 rJjy6ITv0.net
きもは「リッチ」で「拡張」ってことだろ
つまりどんなものを指してるのか全く分からんがな

874:デフォルトの名無しさん
18/07/25 14:20:20.79 HwnrNSAwM.net
Classic ASP.NETは拡張性とかガン無視でMSがデフォルトで提供するお仕着せのものだけ覚りゃ一通りできるっていうドカタ向けフレームワークだぞ
Springみたいなのがお好みならASP.NET Core使え

875:デフォルトの名無しさん
18/07/25 17:37:41.34 rJjy6ITv0.net
>>834
Classic ASP.NETがどのバージョンを指してるか知らんが拡張性無視とか笑わせる
HTTPハンドラとかモジュールとか自作したらほぼすべてカスタムできたわけだが

876:デフォルトの名無しさん
18/07/25 22:02:27.35 LjfK0h7i0.net
すれ違いで書き込んだ者ですが、こういう連続線をC♯を使って、方眼風の画面にクリックして一番近い座標点から始まり次のクリック座標点って感じで連続線を描きたいんですが、なんか参考になる本だとかサイトってありませんか?
URLリンク(i.imgur.com)

877:デフォルトの名無しさん
18/07/25 22:16:28.94 QC64Azkrd.net
>>836
Graphicsクラスを使って自分で線描画するのが手っ取り早いからこのあたりかな
URLリンク(dobon.net)

878:デフォルトの名無しさん
18/07/25 22:56:32.30 oxjpcelO0.net
>>837
そのページは閉じた図形だな。
>>836
同じdobonで
折れ線を描く(DrawLinesメソッド)
URLリンク(dobon.net)

879:デフォルトの名無しさん
18/07/25 23:40:00.99 sTP5vmoc0.net
>>834
ASP.NET CoreってPrimeFacesのような無料で便利なライブラリあるの?
商用ならWijmoやTelerik色など々あるようだけど有料はちょっとね
拡張すりゃ出来るとかハンドラ書けばできるとかそんなのは当たり前の事だけど
そんな車輪の再発明に工数が出るわけがないし

880:デフォルトの名無しさん
18/07/25 23:47:26.31 QC64Azkrd.net
無料ライブラリなんかnugetでなんぼでもインストールできるだろ

881:デフォルトの名無しさん
18/07/26 00:19:33.20 aLLF0qhM0.net
>>840
具体的にはどのパッケージですか?

882:デフォルトの名無しさん
18/07/26 07:51:00.77 qCaaK3zMa.net
>>839
ASP.NET CoreはMVCだからGUIは単なるHTML
ASP.NET Core関係なく普通にHTML/JS/CSSのライブラリを拾ってきて使えばよい

883:デフォルトの名無しさん
18/07/26 14:29:55.52 ujIuVWNLr.net
ライブラリ不要レベルやん
マウス位置とライン引くだけだし

884:デフォルトの名無しさん
18/07/26 14:36:43.63 rEhHpU7y0.net
PictureBoxがあればなんだってできるみたいな

885:デフォルトの名無しさん
18/07/26 16:41:36.62 EX1pNRMXM.net
文字の折返しさえできたら実はなんでもいい

886:デフォルトの名無しさん
18/07/26 16:48:08.19 lkW5ctngd.net
>>843
誰もライブラリ使えなんて言ってないだろ

887:デフォルトの名無しさん
18/07/26 19:08:23.29 BBodZQOSM.net
>>842
そういう使い方はNGですね
サーバーサイドレンダリングが基本のフレームワークとクライアントサイドのフレームワークは常識的に考えてインピーダンスミスマッチでしょう
(primefacesのように最初からセットで設計されてるならともかく)
それならまだaspnet coreはapiに徹してang


888:ularやreact使ったほうがマシです



889:デフォルトの名無しさん
18/07/26 19:18:37.89 IphAgnBQM.net
>>847
なんでクライアントフレームワークの話になるんだ?
AngularやReactのようなものに依存せず単独でページに組み込めるHTML/JS/CSSのコンポーネントなんか腐るほどあるだろ

890:デフォルトの名無しさん
18/07/26 19:30:12.58 36qwSZL10.net
C#で、VPN経由でCiscoのL2スイッチにログインしてフォワーディングデータベースと各ポートのステータスを取得したいんですが、
簡単に解説しているサイトはないでしょうか?
クライアントを動かすPC - HUB - NATルーター - VPNルーター - ネット - VPNルーター - HUB - Ciscoルーター - 目当てのCisco L2スイッチ
ていう状態です。

891:デフォルトの名無しさん
18/07/26 19:41:22.79 jgVPt9Lg0.net
LinQの中身ってfor文ってホント?

892:デフォルトの名無しさん
18/07/26 19:42:46.48 CSIl69XB0.net
アイドルグループの中身は知りません

893:デフォルトの名無しさん
18/07/26 19:49:11.86 jgVPt9Lg0.net
LinQクラスの各メソッドの中身の味方教えてください

894:デフォルトの名無しさん
18/07/26 19:51:33.98 XPlHGtVDd.net
>>852
github

895:デフォルトの名無しさん
18/07/26 19:55:09.78 gWAgddOO0.net
>>852
URLリンク(referencesource.microsoft.com)

896:デフォルトの名無しさん
18/07/26 20:49:53.68 X2GH2dHI0.net
>>847
NGかどうかはお前の都合だがな
ASP.NETでもWebFormあたりは、サーバ側とクライアント側の統合を目指してたんだよ
クライアントスクリプト一切書かなくてもAJAXできるコントロールとかまであった
だが今の流れはサーバサイドはサーバサイド、クライアントはクライアントな流れ
クライアントはすきなライブラリ使え
>それならまだaspnet coreはapiに徹して
apiに徹するのと、html出力に徹するのとどれほどの違いがあると?

897:デフォルトの名無しさん
18/07/26 20:51:44.84 aLLF0qhM0.net
>>848
ASP.NET Coreと相性いいのは無いね

898:デフォルトの名無しさん
18/07/26 20:59:07.08 0BZQ2aB/M.net
ASP.NETの問題というよりC#自体がwebのフレームワークと相性が悪いような…
おとなしくtypescript使ったほうが楽かなとは思う

899:デフォルトの名無しさん
18/07/26 21:10:20.45 aLLF0qhM0.net
>>855
WebFormsの時からずっとだけど鯖で出力したhtmlやバックエンドの挙動を把握してJS書かないといけないからめんどくせえじゃん
なんのためにナマのhtmlを隠蔽したのかって話になる
htmlを隠蔽すると決めたなら徹底しなきゃならん
apiに徹すればクライアントはクライアントで綺麗に切れるからそんな煩わしさから開放される

900:デフォルトの名無しさん
18/07/26 21:25:20.81 +zykdZnW0.net
LinQ は、Rails のQuery object と同じだろ
where 何々
order by 何々
別々に書いた文字列を、1つのSQL 文にまとめて、DB に問い合わせする

901:デフォルトの名無しさん
18/07/26 21:32:16.74 Q5F+5vhQ0.net
>>857
ちょっと何言ってるかわからない

902:デフォルトの名無しさん
18/07/26 21:43:03.68 wePnpHti0.net
>>849
C#が扱うのはTCPあたりだけじゃないのか
そっから下はOSやら何やらの仕事だし上はCISCOのマニュアルなり読めとしか言えそうにない

903:デフォルトの名無しさん
18/07/26 21:45:25.99 F57VHmfS0.net
ソリューションエクスプローラーで.csファイルのなめえ変えてもデバッグできる?データ壊れない?

904:デフォルトの名無しさん
18/07/26 21:47:47.65 0BZQ2aB/M.net
>>862
gitというものがある
そいつを使えば自由自在に試し放題だ

905:デフォルトの名無しさん
18/07/26 21:50:46.39 F57VHmfS0.net
いやあああああああ
これ理解してないと動かなくなるやつうううう
URLリンク(i.imgur.com)

906:デフォルトの名無しさん
18/07/26 21:51:53.07 rEhHpU7y0.net
こういうハッキングの匂いがするやつは回答しないほうがいい

907:デフォルトの名無しさん
18/07/26 21:51:55.20 gWAgddOO0.net
>>862
ソリューションエクスプローラー上での名前の変更は問題なく出来る

908:デフォルトの名無しさん
18/07/26 21:53:30.55 0BZQ2aB/M.net
git使わなくてもソリューションのフォルダごとコピーかzip圧縮でも十分だけど

909:デフォルトの名無しさん
18/07/26 21:55:22.46 F57VHmfS0.net
>>866
>>867
ごめん無事でした
なんかVSがクラス名と一致させようとするからダメかと思いました
ありがとうございます

910:デフォルトの名無しさん
18/07/26 21:59:28.86 F57VHmfS0.net
>>854
これ見てみます
ありがとうございます

911:デフォルトの名無しさん
18/07/26 22:20:23.27 uwMXaYNj0.net
>>868
javaとは違うんだよ

912:デフォルトの名無しさん
18/07/26 22:27:27.51 ySl3KkZ10.net
>>867
gitでもフォルダコピーでも、自由に試し放題なのは同じだが
gitだとフォルダコピーに該当する操作が一瞬なんだよね
フォルダコピーだとある程度大きいプロジェクトになるとプログレスバーを待たなきゃならん

913:デフォルトの名無しさん
18/07/28 08:21:01.22 IX5bbTr/0.net
DataAnnotationsの属性の組み合わせを新しい属性として定義することはできますか?
例えばFooIdは20文字以下で"^[A-Z]{5}-\d+$"にマッチしなければなりません
StringLengthAttributeとRegularExpressionAttributeを組み合わせて
FooIdAttribute := StringLengthAttribute(20) and RegularExpressionAttribute(@"^[A-Z]{5}-\d+$")
といったニュアンスでFooIdAttributeを定義したいのですが方法を探してもまったく見つかりません
もちろんValidationAttributeを継承してFooIdAttributeを作るだけなら出来ました
しかしこの方法ではASP.NETのクライアント検証やEFのコードファーストがStringLengthAttributeとRegularExpressionAttributeを認識してくれません
すべてを諦めて
「モデルプロパティとしてFooIdを使う時はstring型でプロパティを定義してStringLength(20)とRegularExpressionAttribute(@"^[A-Z]{5}-\d+$")をコピペすること」
といった実装ルールを定めてDRY違反には目をつぶるしかないのでしょうか

914:デフォルトの名無しさん
18/07/28 09:32:16.19 rUA3L/4NM.net
バリデーションに限った話ではなく属性のMixinができないのは言語仕様の欠陥
多重継承が可能なら悩むことなかったんだけど...
まあC# 9ではMixinがサポートされるらしいのでそれ以後は簡単になるだろう
それまでは諦めてコピペする以外ない

915:デフォルトの名無しさん
18/07/28 09:50:11.05 Z2VlFyTVa.net
パラメータだけconst stringにしとけ

916:デフォルトの名無しさん
18/07/28 16:04:28.18 xL2l+Gb50.net
>>872
CustomValidationでいけそうな要件にみえるんだけど?
質問内容の理解が間違ってたらごめん

917:デフォルトの名無しさん
18/07/28 16:54:36.21 Ls9tzaL9M.net
>>875
ValidationAttributeはサーバーサイド検証はできるけどクライアントサイド検証やEFには効果がない(追加コードを書かなければ)
属性Mixin的なことができれば追加コードを何も書かずにそれらの収穫を得ることができたはずなんだ

918:デフォルトの名無しさん
18/07/28 17:41:04.66 PBzjh5L/d.net
>>872
\d+にするからなんじゃないの?
\d{14}か、{,14}で解決するのでは?

919:デフォルトの名無しさん
18/07/28 19:08:15.95 Ls9tzaL9M.net
>>877
正規表現を変えても同じ
サーバーサイド検証だけが検証属性の役割じゃない

920:デフォルトの名無しさん
18/07/28 21:33:59.64 ooB9UphUa.net
例がおかしいせいか正規表現で何とかしろって最初に見たとき思った

921:デフォルトの名無しさん
18/07/28 21:46:45.51 IX5bbTr/0.net
TypeDescriptorで動的属性にしたけどダメだった
このFWカスタムしにくい

922:デフォルトの名無しさん
18/07/29 17:20:08.97 1IN8lfJM0.net
VB6のプログラムをC♯で書き直しをやってるんですが、複数あるフォームで毎度使うグローバル変数や定数ってどうしたら良いですか?

923:デフォルトの名無しさん
18/07/29 17:39:04.96 jELBj7vj0.net
それらを管理する構造体かクラスを作るのが良い�


924:ナしょう ただ、作り始める前に現代風のプログラミングの仕組みを勉強したほうが良いんじゃないかな 変数のスコープの問題として解決しようとする時点で基礎が出来ていない気がしてしまう



925:デフォルトの名無しさん
18/07/29 17:48:24.83 OsBw9Csr0.net
>>872
属性二つ付けとくのでダメなのか?
>>881.882
ベタに移植するならなるべく同じようにしとくってのも手だぞ
まあベタ移植ならVB.NETでもいいわけだが

926:デフォルトの名無しさん
18/07/29 18:02:58.75 qyyXPeAu0.net
>>881
もう親フォームのpublicに置いちゃえば?

927:デフォルトの名無しさん
18/07/29 19:28:22.30 w8CG8UOca.net
Appに持たせる

928:デフォルトの名無しさん
18/07/29 19:28:43.90 1IN8lfJM0.net
親フォームにpublicに置くのがベターなのかね?楽でいいし。

929:デフォルトの名無しさん
18/07/29 19:32:07.48 0glkw7L10.net
普通は目的や用途に分けてベースクラスと機能クラスに分けて配置するだろ。

930:デフォルトの名無しさん
18/07/29 19:32:52.42 w8CG8UOca.net
定数はクラスに持たせるべき
グローバル変数というものは存在しない

931:デフォルトの名無しさん
18/07/29 19:36:39.97 LP0lwlvd0.net
public static read onlyをまとめたクラス1個作ればよくね?

932:デフォルトの名無しさん
18/07/29 19:42:49.43 1IN8lfJM0.net
やっぱクラスか。

933:デフォルトの名無しさん
18/07/29 22:10:08.10 UEZe9Eeh0.net
別に構造体でも良いのよ

934:デフォルトの名無しさん
18/07/29 22:38:15.47 F0wMdqEY0.net
標準モジュール→Public Shared Class

935:デフォルトの名無しさん
18/07/29 22:43:45.68 ELcoO8zwa.net
>>881
そんなものは無くすように書き直すのがベストでしょう
どうしてもというのならProgramにでも置く。
お勧めはしないけど、using static使えばVB6っぽく書けると思うw
URLリンク(ufcpp.net)

936:デフォルトの名無しさん
18/07/29 23:31:49.93 1IN8lfJM0.net
例えば何度も登場するファイル名とかパス名とかって使う時はどのようにします?

937:デフォルトの名無しさん
18/07/29 23:33:57.49 caIFgm3n0.net
>>894
決まった値ならconst stringにしておけば間違う心配がない

938:デフォルトの名無しさん
18/07/30 00:08:07.54 VxehPTRB0.net
>>894
staticのメンバ変数

939:デフォルトの名無しさん
18/07/30 00:08:34.88 rsToVW4ga.net
>>894
そもそも何度も登場させない
クラスに集約する

940:デフォルトの名無しさん
18/07/30 07:19:52.76 +iDwScmiM.net
>>897
俺は何度も登場させた方がいい派
登場させないってことは定数であるにも関わらず変数に突っ込んで色んなとこ回して最後にそこに行き着く的なソースになんだろ?
定数なら検索したときに使用箇所がひと目でわかったほうがいいよ

941:デフォルトの名無しさん
18/07/30 07:36:32.18 rsToVW4ga.net
>>898
そうじゃない
同じファイルをあちこちで突っつき回す設計そのものに再考の余地があるということ

942:デフォルトの名無しさん
18/07/30 09:05:26.71 Jg26N5KJ0.net
クラス内で何度も参照する事はあるだろうが、複数のクラスに跨って同じ定数を参照するってのは、
それ、たまたま同じなだけだから、まとめるのは誤りだろ?

943:デフォルトの名無しさん
18/07/30 09:07:31.01 MG3uyJqBM.net
899に同意だな。おれがレビューしたら書き直させるわ。

944:デフォルトの名無しさん
18/07/30 12:08:02.74 7haz7YgPd.net
エクセルをデータベース接続して開いて閉じる。までは出来たのですがそこからシート2を選択して最終行まで読み込むにはどうしたら良いですか?

945:デフォルトの名無しさん
18/07/30 12:10:36.96 5omRjmvzM.net
まずVBAで書いて、意図どおりに動いたらそれを同じようにC#で書くだけ
VBAで動かないならスレ違い

946:デフォルトの名無しさん
18/07/30 12:14:41.69 KgGKmVLt0.net
>>902
接続したならシート名をテーブル名としてSELECT使えば最終行まで�


947:謔黷驍ヘず



948:デフォルトの名無しさん
18/07/30 12:20:48.13 7haz7YgPd.net
セレクトでググってみます!

949:デフォルトの名無しさん
18/07/30 14:16:52.66 7haz7YgPd.net
さっぱりわかりません。これをC♯でどうすればいいですか?
URLリンク(i.imgur.com)

950:デフォルトの名無しさん
18/07/30 14:49:47.75 yNVCdeG40.net
窓から投げ捨てろ

951:デフォルトの名無しさん
18/07/30 15:35:38.43 5x/p7Cmg0.net
コンボボックスのitem追加してるだけやん

952:デフォルトの名無しさん
18/07/30 17:13:19.68 fEGsPpBX0.net
これ、出来上がるまでずっと聞きまくるわけかい?

953:デフォルトの名無しさん
18/07/30 17:49:14.69 7NTlHlZ80.net
とりあえずガチでまったくわからないなら、Do Until とかIf Thenみたいな処理の流れに関するとこから、C#に翻訳してみれ。

954:デフォルトの名無しさん
18/07/30 20:38:04.00 jheKbzlL0.net
>>906
SharpDevelopで変換できたりせんか?

955:デフォルトの名無しさん
18/07/30 20:56:43.06 VxehPTRB0.net
>>911
VB.netならやったことある
VB6はできるんかな?

956:デフォルトの名無しさん
18/07/30 21:47:46.48 wGxxsVxc0.net
>>908
コメントにも書いてあるなw

957:デフォルトの名無しさん
18/07/31 10:42:36.92 2Ex+HyWw0.net
>>912
VB6から直接はだめだろうな。VB.netを経由させて。

958:デフォルトの名無しさん
18/07/31 12:16:51.56 U+0KE03Yd.net
無事なんとか出来ました。
お騒がせしてすみません。

959:デフォルトの名無しさん
18/08/01 02:45:49.37 FqdJoFN10.net
VBを勉強しようかC#を勉強しようか迷ってるんですがVB(およびVBA)でできることはC#でもできると考えていいのでしょうか?

960:デフォルトの名無しさん
18/08/01 06:48:32.72 l9oYGZY20.net
>>916
そんなのお前が出来るか、出来ないかによる

961:デフォルトの名無しさん
18/08/01 07:02:36.02 rdkY69Yn0.net
>>916
いやc#やればいいよ

962:デフォルトの名無しさん
18/08/01 07:13:07.63 qsg6KMIX0.net
VBAで出来てC#で出来ないことはある

963:デフォルトの名無しさん
18/08/01 07:19:08.47 rdkY69Yn0.net
unityでサポートされてるのがc#だった気がする

964:デフォルトの名無しさん
18/08/01 07:29:28.41 Y/cQkN27M.net
>>916
VBextensionを取り込む事が出来る
コーディング量が少ない
単価が高い
VBを選ぶ理由はほぼ無しかと

965:デフォルトの名無しさん
18/08/01 07:53:12.90 FqdJoFN10.net
ありがとうございます
迷わずC#を勉強しようと思います

966:デフォルトの名無しさん
18/08/01 07:58:50.19 +mBt06Dyd.net
RazorもC#

967:デフォルトの名無しさん
18/08/01 08:27:33.28 jJEMbL0b0.net
迷わず逝けよ逝けば分かるさ

968:デフォルトの名無しさん
18/08/01 10:13:49.72 xEVWsek0M.net
VS2013 で Process で別コンソールアプリを実行するプログラムを作っています。
OutputDataReceivedイベントで随時標準出力を取得したいのですがうまくいきません。
同じくVS2013C#で作ったコンソールアプリでのConsole.WriteLineならうまくいくのですが
VC++6.0 で printf 出力だと、ある程度溜まったタイミングでそれまでの出力が一気に来ます。
printfでもリアルタイムで取得できるようにできないでしょうか。

969:デフォルトの名無しさん
18/08/01 10:16:00.84 bFUL3z7Ep.net
そりゃあ、ある程度溜まってから表示されるからじゃね?

970:デフォルトの名無しさん
18/08/01 10:17:43.78 7O+dWvwKM.net
flushしろ
対象に手を入れられないなら無理

971:デフォルトの名無しさん
18/08/01 10:41:41.93 WxaG7LihM.net
つ setvbuf

972:デフォルトの名無しさん
18/08/01 13:34:26.08 xEVWsek0M.net
>>928
setvbuf でうまくできました!
ありがとうございました。

973:デフォルトの名無しさん
18/08/01 21:13:58.64 htMziwx30.net
resharper使ってる人感想教えて
勉強になるって書いてるブログもあったから
半額セール中に試してみようかなと

974:デフォルトの名無しさん
18/08/01 21:15:10.33 soAz8ZFH0.net
ブログに書いてるんならそれを参考にすればいいじゃん

975:デフォルトの名無しさん
18/08/01 22:14:32.39 +VbRL20ga.net
resharper重いから嫌い
よく他の拡張と干渉して不具合起こすし、機能の頭数だけ多くて結局vsにデフォルトで搭載されてる機能と似たようなもの以外は滅多に使わなかった
vscodeが快適すぎて最近はC#もほとんどvscodeで書いてるわ

976:デフォルトの名無しさん
18/08/01 22:38:33.79 htMziwx30.net
使用感産休ー
結局使わなくなっちゃうくらいもっさりは躊躇するな
俺のマシンそんな高性能じゃないし

977:デフォルトの名無しさん
18/08/02 12:35:14.33 atWDWRRZd.net
先日のお騒がせものですが、シートの中身入れることはできたんですが、今度はシート名をコンボボックスに入れるのにこれだとシート名が名前順に入るんですがシート順に入れるにはどうしたらできますか?
URLリンク(i.imgur.com)

978:デフォルトの名無しさん
18/08/02 13:28:17.69 CFW8XzdE0.net
>>932
具体的にどこがcodeの方が良いんだ?
軽さ以外にある?

979:デフォルトの名無しさん
18/08/02 14:17:24.55 B5uzr2w20.net
>>934
URLリンク(msdn.microsoft.com)(v=vs.110).aspx

980:デフォルトの名無しさん
18/08/02 14:19:27.48 5ti5JZJPM.net
>>935
フォントのレンダリングが美しくて見やすい
プラグインが豊富
一緒に他の言語のソースを編集する必要がある場合に完全にシームレスに行き来できる
プロジェクトファイルを直接テキストとして開ける(.NET Coreなら必須)

981:デフォルトの名無しさん
18/08/02 18:24:36.08 IKbU8cfg0.net
細かい話だけど.csprojのテキスト編集は.NET Coreプロジェクトだと
VSでもコンテキストメニューにあるのよね
まあIDEの立場としてはGUIが未実装故の手抜きと見做すべきだろうけどw

982:デフォルトの名無しさん
18/08/02 18:59:54.66 R3xyuwRy0.net
30年前のプログラミング環境に逆戻りですなw

983:デフォルトの名無しさん
18/08/02 19:09:52.83 5ti5JZJPM.net
>>939
設定を必要最小限にして極力テキストベースで完結させるのが今時の流行り
新形式のプロジェクトファイルは直接手で編集しやすいように構造が全面的に見直されてるんだよ
gitにコミットするときとかgithub上でレビューしたりするときにどうせ中身を一行一行意識しなきゃいけないんだから、
GUIの設定画面なんかはっきり言って邪魔なだけ

984:デフォルトの名無しさん
18/08/02 19:27:12.70 R3xyuwRy0.net
30年前と言ってることが同じですな。

985:デフォルトの名無しさん
18/08/02 19:28:34.12 R3xyuwRy0.net
一度滅んだOSSの糞文化を取り込んだせいでどんどんMSの品質が腐っていく。

986:デフォルトの名無しさん
18/08/02 19:31:53.19 vZ9OA8Bgd.net
おじいちゃんかわいそうに

987:デフォルトの名無しさん
18/08/02 19:33:26.86 5ti5JZJPM.net
まあ騙されたと思って新しい形式のプロジェクトファイル使ってみたら?
Coreじゃなくても使えるよ
GUIによる設定は今まで通りにできるし、バージョン管理が楽になって普通に便利

988:デフォルトの名無しさん
18/08/02 19:44:44.63 R3xyuwRy0.net
>>943
無職乙。C#の案件は見つかりましたか?

989:デフォルトの名無しさん
18/08/02 19:47:31.22 R3xyuwRy0.net
>>944
結局ゲイツとカトラーがこんなもの使いものになるかとブチ切れしたのが最後、MSの凋落が止まりませんな。
マイナー街道まっしぐらだったヘジをスカウトしたのが失敗の始まりだったな。

990:デフォルトの名無しさん
18/08/02 19:50:04.61 R3xyuwRy0.net
C#はほぼ壊滅しただがまだVB.netの案件は数多く残っている。
VB >>>> C# これが現実。初心者はVBにしたほうがいい。

991:デフォルトの名無しさん
18/08/02 19:50:50.20 3eKb6bola.net
>>947
いいから早く就職しろ

992:デフォルトの名無しさん
18/08/02 19:52:31.24 vZ9OA8Bgd.net
>>945



993:己紹介かよw



994:デフォルトの名無しさん
18/08/02 19:56:33.48 R3xyuwRy0.net
ID:vZ9OA8Bgd ←こいつC#しかできないみたいw
何を勘違いしてC#を勉強した知らんが10年前から既にC#はオワコンだから諦めろ。今は採用案件は皆無。
馬鹿なおまえになぜか教えてやろう。C#は糞だから。これが世界中のIT業界の総意。ゲイツやカトラーも含めてな。

995:デフォルトの名無しさん
18/08/02 19:59:03.89 QFtuhP10p.net
いつものヘジたんラヴおじさんか
ボーランド時代に逆恨みしてメンヘラ化してるというw

996:デフォルトの名無しさん
18/08/02 19:59:47.82 R3xyuwRy0.net
しかし、今時、30年前の手法でやりましょうって笑えるよな。開発の歴史を全く知らないのだろうか。
それが今の流行ならWindows10やC#も流行ってるはず。だが見向きもされない。むしろ敬遠されてる。

997:デフォルトの名無しさん
18/08/02 20:02:53.83 vZ9OA8Bgd.net
>>950
なるほどだからあなたは採用されないのですね

998:デフォルトの名無しさん
18/08/02 20:03:34.69 R3xyuwRy0.net
>>951
はぁ? むしろボーランドこそ革新的なIDEを普及させたんじゃねーか。そんなことも知らないとか無知すぎる。
それがなんでまたGUIは邪魔なんでテキストでやりましょうってw アホですか。どうせエディタもvim設定なんだろ。
時代遅れの骨董品どもが。

999:デフォルトの名無しさん
18/08/02 20:03:36.14 L2LG0yaW0.net
え、わからない
VBとC#どっちがいいの?

1000:デフォルトの名無しさん
18/08/02 20:04:45.73 R3xyuwRy0.net
>>953
キミは煽りばかり全くC#やVSの話はしないのですね。馬鹿がバレるのが怖いんですか?

1001:デフォルトの名無しさん
18/08/02 20:04:48.57 uMr/Fq0h0.net
ゴミをつついて遊ぶの止めてくれるかなサル君

1002:デフォルトの名無しさん
18/08/02 20:07:45.63 R3xyuwRy0.net
ワッチョイスレって単発煽り多すぎて議論にならんな。
必死にでネット繋ぎなおしてると思うと笑えるw >> ワッチョイ cf81

1003:デフォルトの名無しさん
18/08/02 20:09:28.08 R3xyuwRy0.net
ワッチョイって意味ないな。
低脳馬鹿のコード書けない煽り屋とマイナーOSS陣営から流れてきたvi使いの骨董品以外いない。

1004:デフォルトの名無しさん
18/08/02 20:11:37.17 R3xyuwRy0.net
煽りしかしない奴ってなんで内容ないレスばかりするんだろうと思ったんだけど、
キーボードアレルギーか何かで入力がめっちゃ遅いんだと思うわ。
おれが5レスする間に一行しか打てないトロ臭さ。
リアル低スキルじゃん。今まで碌にコード書いてないのがバレバレだな。

1005:デフォルトの名無しさん
18/08/02 20:15:41.97 R3xyuwRy0.net
結局、技術的反論は皆無。これが現実。
今のC#信者は低スキル。今時、テキスト最高ってw COM、.net全否定かよwww

1006:デフォルトの名無しさん
18/08/02 20:25:19.02 R3xyuwRy0.net
単発煽りって急に大量に現れて急にみんな消えるよな。
可能性として考えられるのは、ゆとりで低スキルで無職で同一人物。

1007:デフォルトの名無しさん
18/08/02 21:55:18.44 6w1GWseD0.net
>>934
OleDbじゃシート順は無視されるから他の手立てを考える必要がある
URLリンク(stackoverflow.com)
xlsxならここのZipArchive使うのとか(他に色々書かれてるコードは意味ないから無視して良い)
System.IO.Compress.PackagingとかOpen Xml SDKとかClosedXMLとか
xlsならNPOIぐらいなんかね あ、上のページにNPOIのサンプルもある

1008:デフォルトの名無しさん
18/08/03 08:51:02.00 tLm3HHgqd.net
まあVSつかいたい奴は明らかにVSが向いてないシーンでも


1009:使いたがるからな。 俺も使い分けてるが、netcoreでも案外VS起動する事の方が多い。nuget探しやすいとかそんなレベルだけど。 どっちでも良いものは割とVS Codeで開くな。 とはいえ、mdのライブプレビューとかVSで出来んのかな?



1010:デフォルトの名無しさん
18/08/03 11:29:34.10 am/wpoGlp.net
VSはIDEの機能を利用したいが為だけに使うことがある。

1011:デフォルトの名無しさん
18/08/03 11:34:31.88 U4A077LcM.net
MDプレビュー&編集はメジャーなVS拡張がある

1012:デフォルトの名無しさん
18/08/03 13:57:43.04 tLm3HHgqd.net
あるんだ。
何が何でもVSの中で過ごせるように出来てんだなぁ、やっぱ。

1013:デフォルトの名無しさん
18/08/03 19:55:03.42 nRWExeYy0.net
C#よりVBのが人気って本当ですか?

1014:デフォルトの名無しさん
18/08/03 21:05:33.17 C7OuABnlM.net


1015:デフォルトの名無しさん
18/08/03 22:34:44.79 pBzQtwq10.net
if(aaa.bbb.ccc ==null){
 ・・・
}
だと、aaaかaaa.bbbがnullの時にNUll参照エラー出ますよね。
じゃあ、
if(aaa!=null && aaa.bbb!=null && aaa.bbb.ccc ==null){
こう書くしかないですか?
もっとスッキリ書けませんか?

1016:デフォルトの名無しさん
18/08/03 22:36:26.80 KKU0/EVq0.net
null条件演算子が使えるなら使え
どのバージョンで入ったかは忘れた(役立たず)

1017:デフォルトの名無しさん
18/08/03 22:43:12.49 ls6gmcCr0.net
>>970
なんか下のコードって
動いたら不具合臭くない?
if(コードA && コードB && コードC)
ってあったときにコードAがfalseだからってコードCが実行されないとおかしくなる処理もあるんじゃね?
コードABCがそれぞれ結果を保持するような動作をするときもにょる
言語仕様がどうなってようと書いたやつは死刑

1018:デフォルトの名無しさん
18/08/03 22:57:30.21 5FtEqA870.net
>>972
横からですが
> ってあったときにコードAがfalseだからってコードCが実行されないとおかしくなる処理もあるんじゃね?
そういう場合は && ではなく & を使うと良いようです。
よかったら「短絡評価」で検索してみてください。

1019:デフォルトの名無しさん
18/08/03 23:23:18.87 zsmRuSg9d.net
aaa?.bbb?. ccc == null

1020:デフォルトの名無しさん
18/08/03 23:36:42.74 ls6gmcCr0.net
>>973
コードABCがそれぞれ判定結果を保持する処理をしてたら余計なお世話じゃねーか?

1021:デフォルトの名無しさん
18/08/03 23:59:44.06 5FtEqA870.net
>>975
>>973
確かにその場合は短絡評価は余計なお世話と言うか、短絡評価を使うことは間違ってますね。
ただ、>>970 の例では副作用がないのは明らかですし、
C# で短絡評価が用意されている以上、それを使うなというのは酷な話のようにも思います。
今回の問題に関しては >>974 のような & も && も使わない解決策もありますが、
Microsoft の Reference Source でも obj != null && ((int)obj) != 0 のように
短絡評価が積極的に使われてますので、そのようなコードは認められるべきではないでしょうか。

1022:デフォルトの名無しさん
18/08/04 00:26:40.78 aY8Umh7+0.net
>>976
人に優しいコードじゃない
見たらちょっと考えちゃうだろ
俺はそれだけで避ける

1023:デフォルトの名無しさん
18/08/04 00:53:29.00 b3FMlOEa0.net
なんかnull条件演算子が短絡じゃないような言い方をしている人がいますが
null条件演算子は短絡評価なので念のため
仕様の是非については関知しません
勝手にすればよろしい

1024:デフォルトの名無しさん
18/08/04 09:01:55.83 n5GHf3Ra0.net
>>974
もし
aaa.bbb= null
だった場合に、
if(aaa?.bbb?. ccc == null)
がtrueになることは無いですか?

1025:デフォルトの名無しさん
18/08/04 09:42:38.97 wpkf7FcP0.net
ならない
もしtrueにしたいのなら if(aaa?.bbb == null || aaa?.bbb?.ccc == null) にする

1026:デフォルトの名無しさん
18/08/04 09:49:39.47 L3XBWYHn0.net
>>979
なるん


1027:じゃね?



1028:デフォルトの名無しさん
18/08/04 10:12:57.05 aY8Umh7+0.net
>>980
ならないんだ?
なんかあんま使わんほうがいいな
この辺の仕様決めた奴って滅茶苦茶だな

1029:デフォルトの名無しさん
18/08/04 10:16:40.19 wpkf7FcP0.net
ごめん確認したらtrueになったわ

1030:デフォルトの名無しさん
18/08/04 10:18:40.31 c4yFtWHQ0.net
Null 条件演算子の結果でnull判定ってなんか使い方おかしくね?
null判定の記述省略が目的だと思ってたわ

1031:デフォルトの名無しさん
18/08/04 10:18:47.38 aY8Umh7+0.net
>>983
なるのかよ

1032:デフォルトの名無しさん
18/08/04 10:46:26.16 Q3NLupVYM.net
?.は使える場面が限られすぎてるんだよな
主語が違っても使えるようにしてほしい
employee ?& company.Fire(employee)
// employee != null ? company.Fire(employee) : null と等価
みたいな

1033:デフォルトの名無しさん
18/08/04 12:29:39.69 AH7fLvgn0.net
>>984
> Null 条件演算子の結果でnull判定ってなんか使い方おかしくね?
そんなもん何をやりたいかによるだろ
> null判定の記述省略が目的だと思ってたわ
Null条件演算子自体の目的はそれでいいと思うが

1034:デフォルトの名無しさん
18/08/04 12:36:27.73 n5GHf3Ra0.net
>>986
>employee ?& company.Fire(employee)
?& とは何ですか?
ググルキーワード教えて下さい。

1035:デフォルトの名無しさん
18/08/04 21:50:20.61 sXotmGKy0.net
>>979
trueになるけどそれでだめなのかよ
だったら
aaa?.bbb != null && aaa.bbb.ccc == null

1036:デフォルトの名無しさん
18/08/05 15:20:33.53 wZ9wDNsY0.net
俺なら分けてコメントでも書いておくかな
if(aaa == null || aaa.bbb= null){
// Hack aaaとbbbがnullでもOKで、その時は何もしない。設計がゴミ
}
else if(aaa.bbb.ccc == null){
}

1037:デフォルトの名無しさん
18/08/05 16:43:04.45 RYmTh0/wr.net
再帰してNullチェックする関数一つ書けばいいのでは?

1038:デフォルトの名無しさん
18/08/05 17:47:48.87 76QdhMr90.net
どうでもいいことになるとレスが増えるな
>>980
テンプレ読んでいるだろ。スレたて

1039:デフォルトの名無しさん
18/08/05 18:17:15.11 DE014Z3K0.net
建てられなかったので別の方お願い

1040:デフォルトの名無しさん
18/08/05 18:21:48.75 C8NdcnMU0.net
>>991
再帰?
何言ってるんだ?

1041:デフォルトの名無しさん
18/08/05 18:38:49.57 hZh56vqa0.net
再帰でnullチェックする関数気になるな

1042:デフォルトの名無しさん
18/08/05 19:30:23.50 yb/HDiEo0.net
コンソールプログラミングでは
Application.DoEventsが使えませんが
代わりに処理中の入力を受け付けるようなメソッドはないでしょうか?
時間がかかる処理をESCキーでキャンセルするような処理を
コンソールプログラムで書きたいと思っています

1043:デフォルトの名無しさん
18/08/05 19:30:55.99 uVIrroLRM.net
こうかな
// nullが見つかった深さを返す
static int? AmazingNullCheck(int level, dynamic obj, params Func<dynamic, dynamic>[] next) =>
 obj == null ? level : next.FirstOrDefault()?.Invoke(level + 1, obj, next.Skip(1).ToArray());
if (AmazingNullCheck(0, a, a=>a.b, b=>b.c) == 2)
 // a.b.c == null

1044:997
18/08/05 19:37:00.55 uVIrroLRM.net
訂正
obj == null ? level : !next.Any() ? null : AmazingNullCheck(level + 1, next.First().Invoke(obj), next.Skip(1).ToArray());
かな

1045:デフォルトの名無しさん
18/08/05 19:43:31.17 uVIrroLRM.net
>>996
特に何もしなくてもCtrl + Cで止まるだろ?
そのときに独自の処理を挟みたいなら Console.CancelKeyPress イベントを使う

1046:デフォルトの名無しさん
18/08/05 19:45:50.96 3KDX12Zf0.net
1000ならjava民絶滅

1047:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 61日 0時間 13分 9秒

1048:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されてい�


1049:ワす




最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch