1 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 15:36:23.74 ID:i1fbuZ/pM.net] !extend:checked:vvvvv:1000:512 次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■関連スレ C#, C♯, C#相談室 Part95 https://mevius.5ch.net/test/read.cgi/tech/1508168482/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■前スレ ふらっと C#,C♯,C#(初心者用) Part143 https://mevius.5ch.net/test/read.cgi/tech/1558002486/ ■情報源 https://docs.microsoft.com/ja-jp
369 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 12:00:12.26 ID:ODFt4ofXM.net] ちゃんとチェックしてからとるならFirst()でよくね?
370 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 12:01:25.55 ID:9Ob07fGvd.net] どうでもいい自分なりの思想を長々と書く人だね
371 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 12:07:05.62 ID:ZYeDXrpNM.net] ILで説明してくれ
372 名前:デフォルトの名無しさん [2019/08/19(月) 13:23:05.09 ID:VzpEDBAc0.net] >>358 なんですが誰かお願いします 別クラスでテキストボックスとかいじるのって普通のやり方ではないん
373 名前:でしょうか? [] [ここ壊れてます]
374 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 13:27:26.75 ID:ERfcd1se0.net] >>359 が返してくれてるだろ
375 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 13:34:49.71 ID:eHF4rC4A0.net] 別クラスでいじるって、 class Hoge { public void SetText(TextBox textBox, string text) { textBox.Text = text; } } みたいな? コントロールを外部に渡すというのはまあ一般的ではないな
376 名前:デフォルトの名無しさん [2019/08/19(月) 13:36:41.01 ID:VzpEDBAc0.net] >>359 返してくださったのはありがたいんですが その3つの単語全て知らなくて、ググってみても高度すぎてわかりません コンソールアプリケーションをフォームアプリケーションに移植しようとしているのですが Console.Write()で出力していたものをlistBoxやtextBoxに出力したいのですが出来なくて困っております どうかアドバイスお願いします
377 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 13:44:13.47 ID:9Ob07fGvd.net] 外部でstringの配列なりListなり作った上でそれを ListBox.DataSourceプロパティにセットすればいいんじゃないの
378 名前:デフォルトの名無しさん [2019/08/19(月) 13:56:34.58 ID:eDOlyF+5a.net] >>369 ■ 選択肢1 FormにAddToLogみたいなメソッドを作ってConsole.WriteLineを LogForm.AddToLog ■ 選択肢2 Console.WriteLineを、記録する文字列を通知するイベントに置き換える。 Formはそのイベントを拾ってListBoxに表示 後者を推奨 基本的にUIの参照を握らせるのは悪い手
379 名前:デフォルトの名無しさん [2019/08/19(月) 14:04:49.07 ID:VzpEDBAc0.net] 移植したいコンソールアプリ class Program { static void Main(string[] args) { var op = new Output(); op.MainProcess(400); Console.Read(); } } public class Output { public override int MainProcess(int count) { for (int col = 0; col < count; col++) Console.Write(col); } }
380 名前:デフォルトの名無しさん [2019/08/19(月) 14:06:13.39 ID:VzpEDBAc0.net] 作ってみたフォームアプリ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { var op = new Output(); op.MainProcess(400); } } public class Output { public override int MainProcess(int count) { for (int col = 0; col < count; col++) listBox1.Items.Add(col);//←ここが動かない } } こんな感じです >>371 ありがとうございます。さっそく試してみます
381 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 15:32:03.08 ID:ERfcd1se0.net] なんでいきなりバックグラウンドワーカーが出てきてるか知らんけど、ドゥーワークは別スレッドで実行する内容を記載するところで、UIスレッドにアクセスしたらダメ→コントロールを触ったらダメ リストボックスにアクセスしたかったらリポートプログレスもしくはコンプリートでUIスレッドにマーシャリングしてから
382 名前:デフォルトの名無しさん [2019/08/19(月) 16:32:24.93 ID:VzpEDBAc0.net] 簡略化して書いていますが凄い長い計算なので計算中でもプログラムが反応する様にbackgroundWorkerにしています backgroundWorkerかでなくとも、他クラスからフォームをいじるということが出来なくて困っています
383 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 17:09:34.09 ID:2nNI8r3od.net] 普通にinvokeしなよ。
384 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 17:49:40.07 ID:VD+/iXFd0.net] >>375 1.他のフォームからコントロールを操作する https://dobon.net/vb/dotnet/form/accessanotherformdata.html 2.BackgroundWorkerからコントロール(UIスレッド)を沿操作する https://dobon.net/vb/dotnet/programing/progressdialogbw.html またはInvoke 今の段階では1+2をやりたいんだよね 設計的なものに口だすのは良くないけど参考までに >凄い長い計算なので計算中でもプログラムが反応する様に ListBoxの一つのアイテムごとに時間がかかるのならMainProcessでループで一気にAddせずに BackgroundWorkerの中で「計算実行→ReportProgressで別フォームListBoxにAdd」をループさ
385 名前:せてもいいんじゃないの [] [ここ壊れてます]
386 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 17:55:50.15 ID:V7QYb24CM.net] >>366 ログ出したいん? なんかプロパティのフラグ立てる必要なかったっけ?
387 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 18:04:30.50 ID:V7QYb24CM.net] 関係なかった 自分が昔出なかったのは AppendTextしてなかったからだったw すまんかった
388 名前:デフォルトの名無しさん [2019/08/19(月) 20:31:39.57 ID:VzpEDBAc0.net] Invoke調べてみました。いけそうな気がしますが書き方が難しいです 上記のコードの場合どのように記述すれば良いのでしょうか?
389 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 20:43:11.70 ID:y72D5AUNp.net] >>380 ここおススメやぞ https://blogs.msdn.microsoft.com/nakama/2009/03/30/part-1-windows/
390 名前:デフォルトの名無しさん [2019/08/19(月) 20:46:44.95 ID:cJsYlnhia.net] パッと見で適当だけど、formにコントロールの変更記述して、コールバック登録してtaskはしらせればいいの違うのか?invokeは当然
391 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 21:00:04.04 ID:Vps+pUHe0.net] >>380 delegate用のメソッド作ってdelegateにセットしてinvoke https://www.atmarkit.co.jp/ait/articles/0506/17/news111.html
392 名前:デフォルトの名無しさん [2019/08/19(月) 22:54:50.46 ID:aQCsW5pK0.net] doubleって整数のほうに偏りがあったら 小数部分は短い精度になるんですが、これ何とかなりませんか? doubleは精度高いから小数点第5位とか精度余裕だろwwwwwwwwwww 989〜〜〜132.1235212596 算出結果 989〜〜〜132.1235312314 正解 え??????????? ちょwwwwww 助けてください
393 名前:デフォルトの名無しさん [2019/08/19(月) 23:06:59.10 ID:eDOlyF+5a.net] >>384 何を言ってるか人に分かるように書かないと誰も答えようがないよw 一般論として、演算誤差を累積させずに 演算可能かどうかはどういう演算をしてるかによるので、 具体的な処理が分からないと何とも言えん
394 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 23:27:14.16 ID:9Ob07fGvd.net] decimal型使えば
395 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 23:36:21.05 ID:0KlGy2IO0.net] >>384 浮動小数点とはそういうもの 小数点以下何桁かではなく全体で何桁か
396 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 23:57:36.54 ID:0eZQgVij0.net] 分数型クラスを自分で作ってとっとけ
397 名前:デフォルトの名無しさん mailto:sage [2019/08/19(月) 23:59:07.58 ID:HKOIeNMl0.net] Seleniumを極めよう
398 名前:デフォルトの名無しさん mailto:sage [2019/08/20(火) 00:07:25.79 ID:VMXKYR4od.net] Form1, Form2, CounterForm があります。 CounterForm にカウントを表示して、0 になったら、Form1 か Form2 のメソッドを実行するにはどうしたら良いでしょうか? やりたいこと 5. 4. 3. 2. 1. 0 と表示 → form1.DoSomething(); CounterForm と Form1 の部分はできているのですが、 複数class間で通知する方法がよくわかりません。
399 名前:デフォルトの名無しさん mailto:sage [2019/08/20(火) 00:22:58.41 ID:sL7gwS880.net] >>390 var f1 = new Form1(); var f2 = new From2(); foreach(var i in Enumerable.Range(0, 5).Reverse()) { await Task.Delay(1*1000); if(0 == i) f1.DoDomething(); // f2? } Form1とForm2のメソッド呼び分け条件を提示して。 あと >複数class間で通知する方法がよくわかりません。 の意味が分からないんでもう少し詳しく
400 名前:デフォルトの名無しさん mailto:sage [2019/08/20(火) 01:06:30.58 ID:yjnOK/Bv0.net] 「通知」…もし表示済みのフォームをあとからいじりたい場合、 public static class static1 { public static form1 form1; //スタティッククラスのフィールドを用意して、 ------------------------------------- public partial class form1 : Form { public form1() { static1.form1 = this; //各自のインスタンスを各自のコンストラクタで設定しておく ------------------------------------- public partial class CounterForm : Form { public void hoge() { try { Exception er = null; this.Invoke( (MethodInvoker)delegate { //デリゲートせずに外からフォームをいじるとエラーになることがある try { static1.form1.DoSomething(); //スタティッククラスのフィールドを経由すると表示済のものがいじれる } catch( Exception e ) { er = e; } //ちなみにデリゲート内のエラーは外側でキャッチできないので、 } ); if( er != null ) { throw er; } //変数を経由して外側でスローする
401 名前:デフォルトの名無しさん [2019/08/20(火) 01:15:05.72 ID:zheL5RcIa.net] >>390 Formだろうが何だろうが、操作したい側が操作対象の参照を握れば良いだけだけど、 親子関係が成立しているとか特殊な前提がなければ、Formが別のFormの参照を 握るのはあんまり良くない。 原則論を言えばそもそもFormにUIと無関係の処理を書く時点で間違っている。
402 名前:デフォルトの名無しさん mailto:sage [2019/08/20(火) 07:52:56.91 ID:yjnOK/Bv0.net] UIと関係あるからフォームなんだろうけど… 非同期処理中にポップアップが出て、その間もメインは触れるが、終わるとメインが変更される なんてことはよくある 書式設定的なのも別フォームから別フォームをいじるわけだし 前のいじり方を残すために、閉じても隠すだけで、同じインスタンスを再表示したい場合とか
403 名前:デフォルトの名無しさん mailto:sage [2019/08/20(火) 09:26:58.30 ID:+NAZ1HN+M.net] フォームと無関係な〜って書いてあるぞ そんなことより全角半角がきもい
404 名前:デフォルトの名無しさん mailto:sage [2019/08/20(火) 12:03:48.15 ID:NghMzgaN0.net] 対象のフレームワーク:Framework 4.0 でコンパイルした自作 DLL があります。 この DLL を 対象のフレームワーク:Framework 4.8 なプロジェクトから参照して使用したとき、 DLL の中はどっちで動くのでしょうか? たとえば自作DLL内で、DataGridView から継承した DataGridViewEx を作ってあったとして これを 4.8 なプロジェクトで利用したとき、DataGridViewEx 内で 4.0 の DataGridView が使われるのか、4.8 の DataGridView が使われるのか、って意味です。
405 名前:デフォルトの名無しさん mailto:sage [2019/08/20(火) 12:10:21.33 ID:mC8iPjWhd.net] 自作DLL内でDataGridViewの参照を特定バージョンにしておけば4.0になるしそうじゃなければ4.8
406 名前:デフォルトの名無しさん mailto:sage [2019/08/20(火) 12:17:12.47 ID:NghMzgaN0.net] 自作DLL 側の System.Windows.Forms を見たら 特定バージョン:false になっていたので、呼ばれる側のバージョンの System.Windows.Forms.dll が使われるってことですね。 Framework 4.8 用に新たに作らないといけないかと思ったのですが、その心配ないみたいで安心しました。
407 名前:デフォルトの名無しさん mailto:sage [2019/08/21(水) 00:27:12.96 ID:7whQ/iRu0.net] あ、間違えた × this.Invoke( (MethodInvoker)delegate { 〇 static1.form1.Invoke( (MethodInvoker)delegate { (thisは自フォーム内のマルチスレッド部分のソースだった) カウントダウンにマルチスレッドが必要とは限らんが むしろモーダルだったり でも「オブジェクトがあれば必ず「通知」できる」という方法は確立しといた方が、オブジェクト指向っぽい クラスオブジェクト指向の前にメッセージオブジェクト指向があったので(Win32API) メッセージ、つまり「通知」
408 名前:デフォルトの名無しさん mailto:sage [2019/08/21(水) 00:57:19.98 ID:CGK7jfA0d.net] >>392 解答どうもありがとうございます。 event かデリゲートで解決できそうです。 // Form1 private void CountDownBtn_Click(object sender, EventArgs e) { var countdownForm = new MYCountDownForm(); // 4 3 2 1 0と表示してから、下に行きたいが、 // これだとカウント 0 を待たずにすぐ下に行く。 countdownForm.Show(); // このクラスのいろいろな処理 }
409 名前:デフォルトの名無しさん mailto:sage [2019/08/21(水) 01:36:11.80 ID:7whQ/iRu0.net] >>400 そっちかw そっちは「モーダルフォーム」でググると出てくると思う その方が普通に基本
410 名前:デフォルトの名無しさん mailto:sage [2019/08/22(木) 16:28:36.46 ID:tih7LC2d0.net] APIが公開されていなくてもスクレイピングして非公開websoketに接続したいのですが、 解析からトークンなど必要なheader情報取得すればできるものですか?
411 名前:デフォルトの名無しさん [2019/08/22(木) 16:50:43.33 ID:xQsiKIbM0.net] 出来るけど利用規約読め API経由だとセーフで API経由しないと逮捕とか書いてあるから
412 名前:デフォルトの名無しさん [2019/08/22(木) 16:57:22.84 ID:erkZnaOI0.net] >>402 https://elaws.e-gov.go.jp/search/elawsSearch/elaws_search/lsg0500/detail?lawId=411AC0000000128
413 名前:デフォルトの名無しさん mailto:sage [2019/08/22(木) 17:10:49.32 ID:NpAwFZ6qM.net] >>404 条文ぐらい示してやれよ
414 名前:デフォルトの名無しさん mailto:sage [2019/08/22(木) 17:59:59.30 ID:90PkXrDL0.net] 色んなところで迷惑なヤローだな
415 名前:デフォルトの名無しさん mailto:sage [2019/08/22(木) 21:54:01.43 ID:rNXeNA230.net] >>402 非公開だろうがクライアント側で処理してるのには変わりないんだから お前が本当にブラウザになり切れればやれるよ 単純に能力と手間の問題だ
416 名前:デフォルトの名無しさん mailto:sage [2019/08/22(木) 22:05:00.16 ID:yaxmcT7W0.net] この質問結構前からいたるところで見る気がするんだけどただのマルチ?
417 名前:デフォルトの名無しさん mailto:sage [2019/08/22(木) 23:55:52.03 ID:W1llczT4d.net] >>400 >>401 とりあえず自力でできたのでソース抜粋 1 // Form1 呼び出し側 private void CountDownBtn_Click(object sender, EventArgs e){ var countDownForm = new MYCountDownForm(7); countDownForm.ZeroReached += OnCounterZeroCallBack; countDownForm.Show(); } // コールバック private void OnCounterZeroCallBack(Object sender, DestReachedEventArgs e){ // UI 更新 }
418 名前:デフォルトの名無しさん mailto:sage [2019/08/23(金) 00:00:27.51 ID:RwBPjFxxd.net] ソース抜粋 2 // MYCountDownForm private System.Windows.Forms.Timer countDownTimer; public int timeLeft; public delegate void ZeroReachedEventHandler(Object sender, ZeroReachedEventArgs e); public event ZeroReachedEventHandler ZeroReached; void Timer_Tick(object sender, EventArgs e){ if (timeLeft >= 1){ timeLabel.Text = this.timeLeft.ToString(); timeLeft--; } else if (this.timeLeft <= 0){ timeLabel.Text = this.timeLeft.ToString(); var args = new ZeroReachedEventArgs(); args.TimeReached = DateTime.Now; OnDestReached(args); this.Close(); } } // END Timer_Tick protected virtual void OnZeroReached(ZeroReachedEventArgs e){ var handler = ZeroReached; if (handler != null){ handler(this, e); } } } public class ZeroReachedEventArgs : EventArgs { // コンストラクタないけどいいの? public DateTime TimeReached { get; set; } }
419 名前:デフォルトの名無しさん [2019/08/24(土) 00:16:35.07 ID:EZ15JXYo0.net] アホな質問ばっかですいません 光速の計算をしたいんですが、doubleでは無理ですか? decimalは使いません お願いします。小数点以下が信用できません。
420 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 00:22:03.18 ID:ka7Yl/470.net] >>411 お前さんが使おうとしている計算方法や欲しい精度とか示さんと答えられんだろうよ
421 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 01:21:02.23 ID:g8XGZa5Z0.net] >>411
422 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 08:41:25.65 ID:VP6gB9DD0.net] 質問いいですか、クラスの処理の途中経過をTextboxのコントロールに送りたいのです public partial class Form1 : Form { Class1 class1 = new Class1(); } class Class1 { public Class1() { Form1.Textbox1.AppendText("Class1を実行しています"); } } このようにしてもForm1のインスタンスがないから実行できません みなさんはクラスのログなどをテキストボックスに送るとき、どう書かれてますか?
423 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 09:03:40.17 ID:BNVmeU2m0.net] >>414 public partial class Form1 : Form { public TextBox Textbox1; Class1 class1 = new Class1(this); } class Class1 { public Class1(Form1 fm) { fm.Textbox1.AppendText("Class1を実行しています"); } } またはFom1のなかに public void appenttext(string st) { Textbox1.AppendText(st); } としてClass1から呼び出す
424 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 15:23:44.45 ID:VP6gB9DD0.net] >>415 レスさんくすです 上の方法でうまくいきました クラスからコントロールを操作ってあまり使わない、というか推奨されてないのかな?
425 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 15:40:00.64 ID:glPHIee0p.net] コントロールは何かを操作する為の機能なんだから、 普通はその操作する何かを直接操作するだろ?
426 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 15:45:48.43 ID:BNVmeU2m0.net] >>416 インスタンスをどう指定していいかわからないんじゃなかったのか 親子関係にあるウィンドウでの操作はいろんなアプリで普通にあるし C#だけにしても「C# 別のフォームのコントロール」でググればやっているところはいっぱい出てくる
427 名前:デフォルトの名無しさん [2019/08/24(土) 15:56:01.09 ID:dsz+mirUa.net] >>416 非推奨というか、普通はやりたいと思わないね。 何かの参照を握るってことはそれに依存してしまうってことだから。 Class1は本来はForm1の参照を持つ設計にしたことで、 事実上そのプログラム専用の他で流用できないコードになってる 他で使う予定ないからそれで問題ないと思うかもしれないが(以下略
428 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 19:37:50.96 ID:VP6gB9DD0.net] >>417 確かにコントロールというぐらいだし >>418 さんくす、実際にやる方法もわからなかったし、教えてもらったのはわかりやすかった 考え方を標準っぽいやり方に寄せたいのです >>419 さんくす、なるほどパーツとして完成してないですね 汎用性の低いコードは改善しないと、でも今回はこれでいきます logの取り方考えないと
429 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 21:52:23.83 ID:PMKXSgkW0.net] 処理側に出力するだけの意味しかないデリゲートでも渡してやれば? 受け側はコントロールを操作とか意識しなくて済むけど public partial class Form1 : Form { : Class1 class1 = new Class1((string s) => { this,Textbox1.AppendText(s); }) ; } class Class1 { delegate void output_delegate(string s); output_delegate output = (string s) => { Console.WriteLine(s); }; //デフォルト出力先はコンソール : Class1(output_delegate _output) { output = _output; } : }
430 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 22:59:49.50 ID:sQirZTQZ0.net] よく答えられるな なにをしようとしてるのかすらわからんわ
431 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 23:07:54.21 ID:VP6gB9DD0.net] >>421 レスさんくすです でもしかし、半分ぐらいしか理解できませんでした、スイマセン 〜解読中〜
432 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 23:11:33.91 ID:XZUr8QhOa.net] refやout, in引数のないdelegateなら 自分で定義せずにSystem.ActionやSystem.Funcを使う手もあるよ
433 名前:デフォルトの名無しさん [2019/08/24(土) 23:15:15.44 ID:dsz+mirUa.net] >>423 理解しなくていいよw デリゲートを直で受け渡しなんかせず、素直にイベントの方を使いましょう。
434 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 23:54:17.30 ID:GocaxRhS0.net] >>422 さすがにそれはお前がアホやで
435 名前:デフォルトの名無しさん mailto:sage [2019/08/24(土) 23:56:09.98 ID:4OMYNXZ10.net] 使う手もあるというか余程じゃなければActionかFuncでは
436 名前:デフォルトの名無しさん mailto:sage [2019/08/25(日) 00:04:50.89 ID:dkxX1jtZ0.net] 俺もActionを推す
437 名前:デフォルトの名無しさん mailto:sage [2019/08/25(日) 00:26:08.77 ID:DAHO6xPV0.net] MethodInvoker(´・ω・`)ボクも忘れないでね
438 名前:デフォルトの名無しさん mailto:sage [2019/08/25(日) 06:55:23.52 ID:Jlb1UCj1M.net] >>414 こういうのってbindingでどうにかするものじゃないの?
439 名前:デフォルトの名無しさん mailto:sage [2019/08/25(日) 07:21:22.29 ID:UfI3Un4o0.net] 可変長の戻り値って実現できませんか?もしくは可変長のタプル これを public void hoge<T>(List<T> list, Func<T, string[]> selector) { ... } hoge(list, listItem => new string[2] { listItem.A, listItem.B }); hoge(list, listItem => new string[3] { listItem.A, listItem.B, listItem.C }); ↓ public void hoge<T>(List<T> list, Func<T, params string[]> selector) { ... } hoge(list, listItem => (listItem.A, listItem.B)); hoge(list, listItem => (listItem.A, listItem.B, listItem.C)); こんな風に書けたらいいのにって感じです
440 名前:デフォルトの名無しさん mailto:sage [2019/08/25(日) 09:33:25.01 ID:NieUwdLz0.net] >>424 さんくす、スマートに書けそうですね、他の人もさんくす、ただ考え中 >>425 今回はイベントで、ただデリゲート勉強するいいちゃんす >>429 さんくす、ググったら実現したいことをピンポイントっぽい >>430 さんくす、binding、さらにむずい、今までと違うアプローチっぽい
441 名前:デフォルトの名無しさん [2019/08/25(日) 13:39:47.35 ID:aNsJH+ura.net] >>431 何言ってるのか理解するのに5分かかったw ラムダ式の右辺(?)の評価方法をジェネリックの型パラメータを確定する場面で指定するとか 普通に無理筋でしょう hoge(list, listItem => new[] { listItem.A, listItem.B }); が hoge(list, listItem => (listItem.A, listItem.B)); と書けたところでたいして嬉しいと思えんけど
442 名前:デフォルトの名無しさん mailto:sage [2019/08/25(日) 14:04:21.51 ID:UfI3Un4o0.net] >>433 おお、new[]で推論してくれるの忘れてました new[]で十分スマートですねこれで問題ないです、ありがとうございました
443 名前:デフォルトの名無しさん mailto:sage [2019/08/25(日) 22:03:25.03 ID:4LqybIGY0.net] Formのプログラムで普通に動作してたOpenFormDialogを使ってる箇所が突然フリーズしてしまいます。 一旦そうなるとWindows自体が不安定になり、他のプログラムで恐らくOpenFormDialogを使ってる所が全てフリーズしOSの再起動が必要になります。 どんな要因が考えられるでしょうか。 プログラムはかんたんなグラフィックエディタで矩形やテキストを移動したり変形する程度です
444 名前:デフォルトの名無しさん mailto:sage [2019/08/25(日) 22:12:11.72 ID:hYfvTIib0.net] OpenFormDialog? OpenFileDialogじゃなくて? OpenFileDialogならフリーズの話はあるから検索して 騒がれたのもう結構前だからまだ残ってるともあんまり思えないけど
445 名前:デフォルトの名無しさん mailto:sage [2019/08/25(日) 22:13:53.33 ID:hYfvTIib0.net] あ、残ってるってのはフリーズするバグを残してる環境の話ね
446 名前:デフォルトの名無しさん mailto:sage [2019/08/26(月) 00:35:03.80 ID:D54D8pf80.net] >>436 OpenFileDialogでした cymon.sysの件は見つけましたけど家のPCにはありませんでした 地道にバグを見つけます
447 名前:デフォルトの名無しさん mailto:sage [2019/08/26(月) 01:40:22.77 ID:YZSrPKBs0.net] List<Employee> のIDとList<int> の一致するEmployeeを取得したいです。 List<int>をforeach、その中でList<Employee>をFirstOrDefaultで探して 新たなList<Employee>にAddする方法はできました。 これのforeachを撲滅して簡潔に書きたいのですがいい方法はありますか?
448 名前:デフォルトの名無しさん mailto:sage [2019/08/26(月) 01:54:35.76 ID:XYz1A7/c0.net] var employees = new List<Employee>(); var ids = new List<int>(); ・・・・ var hitEmployees = employees.Where(employee => ids.Where(id => id == employee.id).Any()).ToList();
449 名前:デフォルトの名無しさん mailto:sage [2019/08/26(月) 05:09:56.54 ID:d+oJYvyp0.net] employees.Join(ids, _emp => _emp.ID, _id => _id, (_emp, _id) => _emp) joinはクエリ構文の方が読みやすいな from emp in employees join id in ids on emp.ID equals id select emp
450 名前:デフォルトの名無しさん mailto:sage [2019/08/26(月) 06:09:07.86 ID:LiZWIy1C0.net] Find
451 名前:デフォルトの名無しさん mailto:sage [2019/08/26(月) 07:20:31.54 ID:H4cvWJOz0.net] employees.FindAll(emp => ids.Contains(emp.ID))
452 名前:デフォルトの名無しさん mailto:sage [2019/08/26(月) 08:56:15.22 ID:WqA3OufOM.net] EnumSetってEnumの値を2のベキにすればいいから存在しないの?
453 名前:デフォルトの名無しさん mailto:sage [2019/08/26(月) 11:40:26.35 ID:Rhz6dR8od.net] イベントハンドラのいなづまアイコンってどういう意味なの? 気になって開発が手につきません。
454 名前:デフォルトの名無しさん [2019/08/26(月) 12:01:50.23 ID:EHOEsFfWa.net] 地下鉄漫才かよw
455 名前:デフォルトの名無しさん mailto:sage [2019/08/26(月) 16:00:24.81 ID:7fzFkpCMr.net] execute 神がいかずちをもって手を下す 的な
456 名前:デフォルトの名無しさん mailto:sage [2019/08/26(月) 22:32:00.17 ID:YZSrPKBs0.net] >>440-443 どれもなるほど!と勉強になりました ありがとうございます 今回はシンプルな>>443 さんのでいきます!
457 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 07:54:15.38 ID:wbq0Lfqra.net] おお、なるほど。LINQのクイズ集があれば面白そうだな。
458 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 08:59:40.07 ID:S6vHFDx3d.net] 443はlinqじゃないぞ 2.0の頃からあるListクラスのメソッドだけだ
459 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 10:18:31.48 ID:AUeyxvTx0.net] >>450 ラムダ式が使えるようになったのはC#3.0から
460 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 11:47:29.33 ID:S6vHFDx3d.net] >>451 そうそう。なのでデリゲート使って書く必要はあるけど
461 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 19:15:36.40 ID:4aKZbpn00.net] 次のようなことをしたいのですが、どうすればいいでしょうか。 async、awaitを使えばいいようにも思えたのですが、クラス内のループが止まらず・・・ 1.ボタン押下でとある処理をするクラスのインスタンスを生成し、クラス内で処理を無限ループ 2.ボタン押下でクラス内のループを停止
462 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 19:21:08.99 ID:a3Zgv65M0.net] >>453 ループさせているクラス内に止めるメソッド付けてボタン押したときにそれ呼び出せばいいだけでは イベントメソッドは別のクラスでもできるから直にボタンのイベントに追加してもいいし
463 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 20:10:30.11 ID:2XS9VBdia.net] CancellationTokenSourceを使うのが比較的妥当なやり方かな 2でボタンを押したらcancellationTokenSource.Cancel() 無限ループ側の処理では適宜cancellationToken.ThrowIfCancellationRequested()
464 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 20:56:45.60 ID:LqXN8ItS0.net] 低レベルな実装だと終了フラグの参照を渡しておくとか
465 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 21:11:30.63 ID:fYPVnhP50.net] >>455 単純なループ処理でキャンセル例外が必要なければ CancellationToken.IsCancellationRequestedをチェックするのでも良いね
466 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 21:12:50.98 ID:4aKZbpn00.net] 皆さん、ご回答ありがとうございます。 >>454 停止メソッドにより、ループ条件から外れるフラグを立てて 処理停止させるイメージでしょうか。 >>455 CancellationTokenSource初めて聞きました。 便利ですね! >>456 すみません。フラグでの終了処理しか思いつきませんでした・・・ もう少しマシな実装になるとどうなるのでしょうか。 教えてもらえると助かります。
467 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 21:26:09.47 ID:4aKZbpn00.net] >>457 そういった方法もあるのですね。ありがとうございます。
468 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 22:06:20.98 ID:GZd8Fc/Qp.net] 無限ループなんか組むな。
469 名前:デフォルトの名無しさん mailto:sage [2019/08/27(火) 22:40:07.64 ID:4aKZbpn00.net] すみません・・・ あるフォルダにファイルが保管されたときに そのファイルを処理したくて監視に無限ループを使ってしまいました。 他に良い方法があれば、お教え願えないでしょうか。