1 名前:デフォルトの名無しさん (ワッチョイ f97b-lsIp) mailto:sage [2016/10/08(土) 21:33:26.22 ID:KfBpvv2w0.net] 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part124 echo.2ch.net/test/read.cgi/tech/1471004887/ ■関連スレ C#, C♯, C#相談室 Part91 echo.2ch.net/test/read.cgi/tech/1467142749/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■情報源 https://msdn.microsoft.com/en-us/library/gg145045.aspx referencesource.microsoft.com/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
601 名前:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G) [2016/11/19(土) 02:06:11.41 ID:E+HZm7+A0.net] >Checkbox継承してOnPaintで描けばいいだけだから、やってみるば簡単 >Checkedで描画する画像切替えるとかで簡単に実現できる >サイズは画像のサイズに合わせてMaximumSizeとMinimumSizeを固定しちゃうとかかな こんなことやったことないわ。どういう意味だ? なんでChecboxを継承する必要があるんだ? つかトグルSWだよな。 ちょっとやってみるんで指導よろしく。 OnPaintで描くってどういう意味だ? 情報が欠落しすぎ。 まずプロジェクトに追加するのは何? ユーザーコントロール? クラス? コンポーネント? どれだ?
602 名前:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G) [2016/11/19(土) 02:08:07.35 ID:E+HZm7+A0.net] checkboxを継承するってのだから、どう考えてもクラスだよな。じゃあまあ 追加クラス。
603 名前:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G) [2016/11/19(土) 02:31:43.92 ID:E+HZm7+A0.net] public class clsToggleButton : CheckBox { Form _pform; public clsToggleButton(Form frm) { _pform = frm; } public void OnPaint (PaintEventArgs pevent) { //ここにトグルボタンを描く if( this.Checked == false ){ //どこに描くんだろ? }else{ } } }
604 名前:デフォルトの名無しさん (ワッチョイ 5e7d-XpIe) mailto:sage [2016/11/19(土) 02:41:43.15 ID:wlTmYqF50.net] 追加→新しい項目→カスタムコントロール で、追加されたコードのControlの部分をCheckBoxに。 OnPaintの所は、例えば↓みたいすれば、クリックするたびに赤と青が入れ替わる protected override void OnPaint(PaintEventArgs pe) { using (var brush = new SolidBrush(Checked? Color.Red : Color.Blue)) { pe.Graphics.FillRectangle(brush, ClientRectangle); } } 一度ビルドすると、ツールボックスに載るのでドラッグ&ドロップでフォームに配置できる
605 名前:デフォルトの名無しさん (スププ Sdb8-RUi6) mailto:sage [2016/11/19(土) 02:54:11.98 ID:aIswJeomd.net] >>593 一切欠落してなくない? Checkboxを継承したコントロールだから、クラスで、コンポーネントで、ユーザコントロールだけど、そんな瑣末な話は置いといて、 とりあえず、OnPaintをオーバーライドして、graphicsにthis.checked描画してみたら?
606 名前:デフォルトの名無しさん (ワッチョイ 5e41-mj3c) [2016/11/19(土) 04:05:39.65 ID:N2eyluxh0.net] どうしてもタメになる書籍はC++をサンプルに使われてることが 多いから調べてはいるけど C#に慣れちゃってるとまーキモチワルい 確かにこれが出来ればほとんど何でも出来るんだろうけど・・・ とりあえずC++最高ということで
607 名前:デフォルトの名無しさん (ワッチョイ 5e41-mj3c) [2016/11/19(土) 04:38:58.99 ID:N2eyluxh0.net] ちげぇ! C#最高!です なんとか基本的なことは出来るようになった希ガス 疲れたよ、もう
608 名前:デフォルトの名無しさん (ワッチョイ 9fcf-RAPI) [2016/11/19(土) 06:23:34.01 ID:S6bRHJ270.net] 600げと
609 名前:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G) [2016/11/19(土) 06:31:51.33 ID:E+HZm7+A0.net] >Checkboxを継承したコントロールだから、クラスで、コンポーネントで、ユーザ >コントロールだけど、そんな瑣末な話は置いといて、 うろ覚えの初心者には全然些末じゃないy。 無茶苦茶大事!!! 「Checkboxを継承したコントロール」ここにたどり着くのに一晩かかる。 ユーザコントロール is a コンポーネント コンポーネント is a クラス こういう関係なの? おお、初めて知った。 トグルボタン は ユーザーコントロールとして作るってことだね。納得。 でも空クラスを配置してCheckboxを継承してもおんなじことだよね。 何が違うの?
610 名前:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G) [2016/11/19(土) 06:56:43.78 ID:E+HZm7+A0.net] >596 この説明は完璧って感じがする。 これからでかけるのでチェックできない残念。
611 名前:デフォルトの名無しさん (ワッチョイ 9c7b-wMId) mailto:sage [2016/11/19(土) 08:53:15.23 ID:gGKRRZRa0.net] >>601 各種コントロールの説明や、継承チェーンを見れば? 自分が作りたいコントロールに近いものを探して使うか、 そこから継承して派生したコントロールを作ればいい クラスを使う時は、継承チェーンをさかのぼりながら、 ベースクラスにどういう機能があるか調べる なぜなら派生クラスは、ベースクラスのすべての機能を持っているから
612 名前:デフォルトの名無しさん (ワッチョイ 3f49-YqEk) mailto:sage [2016/11/19(土) 12:30:26.20 ID:xW+PNGAl0.net] >>598 STLなんかは後付けで今風な機能を実装しようとしてて、無理やり感が半端ない。
613 名前:デフォルトの名無しさん (スププ Sdb8-RUi6) mailto:sage [2016/11/19(土) 13:12:50.96 ID:aIswJeomd.net] >>601 同じ事だよ。 ユーザコントロール一度画面から選ぶと、似たようなコード出て来るから、 そいつの継承元見てみ。 >>596 は親切だな。
614 名前:デフォルトの名無しさん (ワッチョイ 9c7b-wMId) mailto:sage [2016/11/19(土) 18:51:47.20 ID:gGKRRZRa0.net] よく知らんけど普通、IDEにはクラスウィザードが付いている 新しいクラスを作るときは、クラスウィザードの画面で作れば、自動的にクラスが作られる
615 名前:デフォルトの名無しさん (アウアウオー Sa36-MfQN) mailto:sage [2016/11/19(土) 19:01:01.87 ID:VKIYWaqIa.net] そんな使ってる人ほとんどいないと思うよw ところで前から思うんだけどウィザードってのはポリコレ的にどうなのかね
616 名前:デフォルトの名無しさん (ワッチョイ 3a20-XpIe) [2016/11/20(日) 19:20:37.60 ID:DP6jtmXB0.net] ハードディスクのベンチマークを測る 簡易ツールを作りたくて ランダムリード・ライトのサンプルを見つけたのですが これでハードディスクへのランダムリード・ライトになるでしょうか? //ランダム書き込み using (System.IO.BinaryWriter rw = new System.IO.BinaryWriter( File.OpenWrite(@"C:\temp\test.txt"), System.Text.Encoding.UTF8)) rw.Write("0"); //ランダム読み込み using (System.IO.FileStream file = new FileStream(@"C:\temp\test.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read)) { byte[] bs = new byte[file.Length]; file.Read(bs, 0, bs.Length); }
617 名前:デフォルトの名無しさん (ブーイモ MMb8-RUi6) mailto:sage [2016/11/20(日) 19:28:04.56 ID:aSeFXcOvM.net] ファイル名が違うな ¥¥.¥PhysicalDriveN だよ
618 名前:デフォルトの名無しさん (ワッチョイ 777b-w7k2) mailto:sage [2016/11/20(日) 20:25:05.70 ID:JNgwCyth0.net] ディスク書き込みは複数層でバッファリングがあるから .NETのライブラリだけじゃ割と無理じゃないかな
619 名前:デフォルトの名無しさん (ワッチョイ 3a20-XpIe) [2016/11/20(日) 20:32:04.76 ID:DP6jtmXB0.net] \\.\PhysicalDriveN なんてドライブの指定方法があるのですね ただ、MBRを迂闊に書き換えると クラッシュするとか 単純な読み書きは危険なようで だから、公開されてるベンチツールには シーケンシャルの読み書きしかないのかと思いました 情報ありがとうございます
620 名前:デフォルトの名無しさん (ワッチョイ fa73-XpIe) mailto:sage [2016/11/20(日) 22:44:41.11 ID:ujJmR5b00.net] BindingSource のデータをLINQで扱いたいのですが ↓コードのbs に登録されているデータをLINQを使って ID=100とID=200 のKamokuの平均値をだしたいのですがどんな風にやればいいでしょうか? private List<Employee> emplist; BindingSource bs = new BindingSource(emplist, string.Empty); dataGridView1.DataSource = bs;
621 名前:デフォルトの名無しさん (ワッチョイ 777b-w7k2) mailto:sage [2016/11/20(日) 23:11:49.40 ID:JNgwCyth0.net] DataSourceがList<T>ならBindingSourceでフィルタできるわけでも無し emplistにWhereとAverageするだけじゃね Whereで要素数0になる可能性があるとちょっと面倒だけど
622 名前:デフォルトの名無しさん (ワッチョイ fa73-XpIe) mailto:sage [2016/11/20(日) 23:36:14.07 ID:ujJmR5b00.net] >>613 DataTable でLINQ使うときは、↓のように var items = dt.AsEnumerable() でやれるのですが >>612 のようにやるときは、bs.AsEnumerable() みたいにはできないのですか? DataTable dt; var items = dt.AsEnumerable() .Where(x => x["id"] == "100") .Select(x => x["Koumoku"].ToString());
623 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/20(日) 23:45:11.80 ID:mNZMIvsS0.net] BindingSourceは一応IEnumerableを実装してるから bs.Cast<Employee>().Where(…とできるんじゃないの 試したことないしそんなことしようとも思わないけど
624 名前:デフォルトの名無しさん (ワッチョイ fa73-XpIe) mailto:sage [2016/11/20(日) 23:51:53.85 ID:ujJmR5b00.net] >>615 ありがとう試してみます。
625 名前:デフォルトの名無しさん (ワッチョイ 3f49-YqEk) mailto:sage [2016/11/21(月) 02:19:09.69 ID:iKiRpZRf0.net] >>611 >>610 の言う通り、c#のStreamキャッシュとOSのファイルキャッシュがあるから、C#標準のライブラリだけじゃ実現できないよ。 P/InvokeでCreateFile()やWriteFile()/ReadFile()等のWIN32APIを呼び出す必要がある。 OSのファイルキャッシュは、CreateFile()でオープンする時にFILE_FLAG_NO_BUFFERINGを指定すれば無効にできる。 HDDに直接書き込みたいなら、ロックとアンマウントも必要になるんじゃないかな。 (DeviceIoControl()でFSCTL_LOCK_VOLUMEとFSCTL_DISMOUNT_VOLUME)
626 名前:デフォルトの名無しさん (ワッチョイ 159a-2Ppy) [2016/11/21(月) 05:14:56.16 ID:6eO9t+4E0.net] >>490-491 C#側でデリゲート型を定義して、起動時にコールバック関数のデリゲートをDLLに渡し、 DLL側では関数ポインタとして受け取ることで、C#側の関数をC側から適宜呼び出すことが できました。C#側はunsafeを使ってないマネージコードなのに、Cから関数ポインタの形で 呼び出すことができるんですね、ちょっと驚きました。有り難うございました。 そこでもう一つ疑問が出てきたんですが、DllImportしたDLLがprintfした内容(標準出力)を、 WPFアプリやFormアプリで受け取って特定のコントロールに出力したり、GUIとは別に コンソールウィンドウを出してそちらに表示するようなことはできるんでしょうか。
627 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/21(月) 07:15:54.06 ID:EumYM2T30.net] SetStdHandleとかでできるんじゃないの 素直に子プロセス作ってリダイレクトした方が簡単確実だけど
628 名前:デフォルトの名無しさん (ワッチョイ fa23-tQqt) mailto:sage [2016/11/21(月) 08:51:20.53 ID:hLpmxTjl0.net] int25とかint26思い出したわ
629 名前:デフォルトの名無しさん (ワッチョイ fa73-XpIe) mailto:sage [2016/11/21(月) 20:26:47.04 ID:7M/YTSBB0.net] LINQで質問ですが class Person { public string id { get; set; } public DateTime Dateday{ get; set; } public int kamoku { get; set; } } var items = (from tesA in bs.Cast<Person>() where tesA.id == 100 select tesA.kamoku).avrage; ↑でID = 100 のkamoku の平均を求めていますが、 Datedayの最新10件で平均を求めるのはどんな書き方があるでしょうか? 後、IDの割合を求めるときに↑のwhere tesA.id == 100 を外したのをもう一回やって割り算しているのですが一括で書くときはどうすればいいでしょうか?
630 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/21(月) 22:40:08.70 ID:EumYM2T30.net] >>621 var av = ( from tesA in bs.Cast<Person>() where tesA.id == 100 order by tesA.Dateday descending select tesA.kamoku ).Take(10).Average(); IDの割合の方は質問の意味が分からない
631 名前:デフォルトの名無しさん (ワッチョイ fa73-XpIe) mailto:sage [2016/11/21(月) 23:04:49.74 ID:7M/YTSBB0.net] >>622 ありがとうございます。参考になります。 IDの割合はAverageでなくてcountにしたほうがよかった。すみません 今は↓の結果 items100 / itemsALLで割合をだしています。これを1回で書きたいです。 var items100 = (from tesA in bs.Cast<Person>() where tesA.id == 100 select tesA.kamoku).count; var itemsALL = (from tesA in bs.Cast<Person>() select tesA.kamoku).count;
632 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/21(月) 23:08:48.37 ID:EumYM2T30.net] items100 / bs.Count でいいだろそれ
633 名前:デフォルトの名無しさん (ワッチョイ 5e41-mj3c) [2016/11/21(月) 23:14:12.37 ID:lc1W0DQ40.net] 一連のスイッチのオンオフを配列にいれて シーケンスな処理を
634 名前:するんですが そのままだと当然boolの配列です。 この場合、配列にする際にConvert.ToInt32を使い 0,1の配列にした方が処理速度が速くなる ということはあるでしょうか? 配列数は多くても64個です。 自分で確認はまだしてないですが 知見多き方お願いします。 [] [ここ壊れてます]
635 名前:デフォルトの名無しさん (ワッチョイ fa73-XpIe) mailto:sage [2016/11/21(月) 23:22:00.28 ID:7M/YTSBB0.net] >>624 >>623 すみません items100 / bs.Count だと実際にやりたいので使えないので ↓ので items100 / itemsALL で書くときはどうしたらいいでしょうか? var items100 = (from tesA in bs.Cast<Person>() where tesA.id == 100 select tesA.kamoku).count; var itemsALL = (from tesA in bs.Cast<Person>() where tesA.id > 100 select tesA.kamoku).count;
636 名前:デフォルトの名無しさん (ワッチョイ 0448-dXbs) mailto:sage [2016/11/21(月) 23:30:37.04 ID:cS6E2DFI0.net] >>625 BitArrayを調べてみたらいい、非ジェネリックでは唯一つかえる存在かもな
637 名前:デフォルトの名無しさん (アウアウオー Sa36-MfQN) mailto:sage [2016/11/21(月) 23:34:45.98 ID:4A1pLeCTa.net] >>625 bool使って遅くなる理由があると思えんなあw どっちにしろ要素数64じゃ差はでないでしょ。 「シーケンシャルな処理」とやらが単純な論理演算ならboolやboolの代用にintを使った配列ではなく、 intをビットワイズで使えば圧倒的に高速になるとは思う
638 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/21(月) 23:55:19.26 ID:EumYM2T30.net] >>626 短くしたいだけならこれでいいだろ var persons = bs.Cast<Person>(); var items100 = persons.Where(p => p.id == 100).Count(); var itemsALL = persons.Where(p => p.id > 100).Count(); 全件スキャンが2度走るのが気持ち悪いということなら、素直にループにするか、 もしくはこんなやり方もできないこともない var items = bs.Cast<Person>().ToLookup(p => p.CompareTo(100)); return items[0].Count() / items[1].Count();
639 名前:デフォルトの名無しさん (ワッチョイ fa73-XpIe) mailto:sage [2016/11/22(火) 00:12:53.34 ID:FPsVs5Xk0.net] >>629 最後のがまだよくわからないけど調べてみます。 ありがとうございました。
640 名前:デフォルトの名無しさん (ワッチョイ 7d7b-XpIe) mailto:sage [2016/11/22(火) 00:22:30.53 ID:a+0IO69G0.net] >>630 もしかしてArrayListつかってる?List使った方がいいよ bs = new List<Person>(); ・ ・ float result = (float) bs.Count(x => x.id == 100) / bs.Count(x => x.id > 100);
641 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/22(火) 07:30:50.02 ID:agBMDwRZ0.net] 関係ないけどfloatは誤差が簡単に表面化するから 初心者スレ的には「最終出力以外には使うな」でいいと思う
642 名前:デフォルトの名無しさん (ドコグロ MM74-EDxK) mailto:sage [2016/11/22(火) 09:09:41.67 ID:iOkC5GDaM.net] >>574 遅くなりすみません。 教えていただいたコードでうまくいきました。 ありがとうございました。 使っているのはVisual C# 2013です。
643 名前:デフォルトの名無しさん (ワッチョイ 40d9-k96Z) mailto:sage [2016/11/22(火) 13:19:07.30 ID:xeeHVDvp0.net] VS2013のC#って>>574 の書き方は出来なかったはずだが
644 名前:デフォルトの名無しさん (ワッチョイ 5e41-mj3c) [2016/11/22(火) 20:13:44.80 ID:ZJs8cfZ60.net] >>627 >>628 ありがとうございます!! そうですよね、このくらいの要素数なら どっちにしろ誤差レベルとは思いましたが かなり有益な情報得られたんでよかったです 調べてみます!
645 名前:デフォルトの名無しさん (ワッチョイ 800d-ke/V) [2016/11/22(火) 21:09:02.72 ID:0tp2RUgI0.net] MVVMで、AのViewにあるボタンを押したらBのViewにBindingされているViewModelの値を変更するにはどうすればいいですか?
646 名前:デフォルトの名無しさん (オッペケ Sra9-hkLf) mailto:sage [2016/11/22(火) 21:23:07.00 ID:vhsrXRxUr.net] >>636 AとBにモデルとして関連があるなら、それ同士で連係。 画面としてのみの関連なら、ViewModel同士で連係。
647 名前:デフォルトの名無しさん (ワッチョイ 800d-ke/V) [2016/11/22(火) 21:39:14.03 ID:0tp2RUgI0.net] >>637 返信ありがとうございます ViewModel同士の連係の方ですが、具体的にどのようにすればいいでしょうか? 例えばBのViewModelにあるIsEnabledというメンバー変数の値がある場合、StaticにしてAのViewModelでBのViewModelのインスタンスを作るのでしょうか?
648 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/22(火) 21:48:58.09 ID:agBMDwRZ0.net] >>638 AがBのインスタンスを作るんならStaticにする必要は全く無いだろ しかし、そもそもVMを設ける目的は単体テストであるということを考えると、 VMが別のVMに明示的に依存するのは好ましくない 理想を言えば、AからBを直接newしたりBのメンバに直接アクセスするのではなく、 インターフェース (例えばIB) を定義してAからはIBを通してアクセスすることにして AにBのインスタンスを外から渡してやるのがいい インスタンスを渡すのはViewでやるかDIコンテナ使う
649 名前:デフォルトの名無しさん (ワッチョイ 800d-ke/V) [2016/11/22(火) 21:58:02.53 ID:0tp2RUgI0.net] >>639 ご教授ありがとうございます! ただ、 >インターフェース (例えばIB) を定義してAからはIBを通してアクセスすることにして >AにBのインスタンスを外から渡してやるのがいい この部分がわからないので、コードで実例を教えてください
650 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/22(火) 22:11:27.86 ID:agBMDwRZ0.net] >>640 こんな感じ interface IEnableable { public bool IsEnabled { get; set; } } class AView { private AViewModel vm; public AView() { this.vm = new AViewModel(BViewModelのインスタンスを取得()); } } class AViewModel { private IEnableable b; public AViewModel(IEnableable b) { this.b = b; } void 連携する() { this.b.IsEnabled = true; } } class BViewModel : IEnableable { public bool IsEnabled { get { 略 } set { 略 } } } BViewModelのインスタンスを取得() のところはnew BViewModel()でもいいしシングルトンでも何でもいい MVVMでは依存関係はなるべくViewに押し付けるのが基本
651 名前:デフォルトの名無しさん (ワッチョイ 800d-ke/V) [2016/11/22(火) 22:21:59.10 ID:0tp2RUgI0.net] >>641 なるほど、このようにやるんですね Viewに押し付けるというのも勉強になりました 本当にありがとうございます!
652 名前:デフォルトの名無しさん (ワッチョイ 9cba-XpIe) mailto:sage [2016/11/22(火) 22:34:41.26 ID:BBlq8Dj70.net] アプリケーションの設定を保持するクラスを作ってこれをシリアライズできるようにしたのですが、 このシリアライズしたものをapp.configに含むことはできるでしょうか? ファイル名や場所をコードで指定するのが嫌だなぁという程度の理由ですが。
653 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/22(火) 22:42:45.68 ID:agBMDwRZ0.net] >>643 System.Configuration.ConfigurationSection でも普通にSettings使った方が簡単だと思うけど
654 名前:デフォルトの名無しさん (ワッチョイ 9cba-XpIe) mailto:sage [2016/11/22(火) 23:20:36.22 ID:BBlq8Dj70.net] そうですか、無いですか。ありがとうございました。
655 名前:デフォルトの名無しさん (ワッチョイ a030-qiik) mailto:sage [2016/11/23(水) 01:45:13.48 ID:MGsJz9yg0.net] 噛み合ってなさが絶妙
656 名前:573 (ドコグロ MM87-f5kA) mailto:sage [2016/11/24(木) 09:42:16.88 ID:EZR6VYZqM.net] >>573 です。 if(1 == args.Count()){ var t1 = new TestItem("デバイス1"); } if (2 == args.Count()){ t1.AddMeasured(new Measured("電圧", "V", 1)); t1.AddMeasured(new Measured("電流", "mA", 100)); testItems.Add(t1); } 上記のようにすると下IF文内のt1が”現在のコンテキスト内に存在しません”となってしまします。 IF分の条件式は例ですがt1の生成と値の格納が同条件でない場合は どのように処置するべきでしょうか。 やりたいことはテキストファイルから各語を読み出して格納して数値演算(平均値、最大、最小、標準偏差)したいのです。 テキストに格納してある情報は次の順になります。 ”項目名1” ”項目名1の測定値1” ”項目名2” ”項目名2の測定値1” ・・・ ”項目名10” ”項目名10の測定値1” ”項目名1” ”項目名1の測定値2” ・・・ 1回目の”項目名n”を取得したときに配列(List)を生成し その後は”項目名n”により選択した生成済みの配列に”測定値n”を格納したいです。 本業はHWよりのためC#基礎がわかって無く申し訳ありません。 でも何とかできることは自分で処理したいと思っています。 よろしくお願いします。
657 名前:デフォルトの名無しさん (ワッチョイ ab3a-/sNf) mailto:sage [2016/11/24(木) 10:18:45.81 ID:+mUg/yMV0.net] >>647 if文の外で変数定義する。 『スコープ』の概念を学ぶべし。 今のレベルの基本が分かってない内はvar使わない方が良いかも。 varは便利だし正しく使えば特に害のない機能だけど、意味が分からないうちはやめとこう。
658 名前:デフォルトの名無しさん (ドコグロ MM27-f5kA) mailto:sage [2016/11/24(木) 11:09:09.16 ID:IyDqbIdrM.net] >>648 ありがとうございます! チャレンジしてみます。
659 名前:デフォルトの名無しさん (ワッチョイ a77b-rApL) [2016/11/24(木) 12:28:53.06 ID:P/Ibr7r50.net] varは積極的に使うべきだよ。
660 名前:デフォルトの名無しさん (ワッチョイ c748-AQyI) mailto:sage [2016/11/24(木) 14:01:47.31 ID:4ySrR9x20.net] >>647 標準偏差は自前で計算してもいいけどMath.NET Numericsというのが既にある(nugetで入れる) ideone.com/kv7bLQ こういうのってRの方が手っ取り早い気がする CSVの読み込みからグラフ描画まで揃ってるしな
661 名前:デフォルトの名無しさん (ワッチョイ 5b3c-/sNf) mailto:sage [2016/11/24(木) 14:14:09.14 ID:G2Ig6Dqz0.net] >>648 var関係ないやろ
662 名前:648 (ブーイモ MMc7-/sNf) mailto:sage [2016/11/24(木) 15:37:41.35 ID:cupH4QVAM.net] >>650 それは同意する。積極的に使うべき。 ただ、スコープの理解がまだの方には少し毒と思っただけ。 >>649 異論も多いようなので、varに関しては先ほどの発言を気にせず自由にやって下さいな。頑張って!
663 名前:デフォルトの名無しさん (JP 0Hdf-sTmH) mailto:sage [2016/11/24(木) 17:51:15.84 ID:2Y5JG7GhH.net] 質問します。 ファイルの存在を確認する方法についての質問です。 if (System.IO.File.Exists(@"C:\tmp\sample.txt")) { MessageBox.Show("ファイルは存在します"); } else { MessageBox.Show("ファイルは存在しません"); } 上記例の場合、 「tempフォルダ内のsample.txtというファイル」 の存在を確認するようになっていますが、 同時に異なる2つのフォルダ内の2種類のファイルの存在を 確認するにはどうすればいいのでしょうか? C:\tmp1\sample1.txt C:\tmp2\sample2.txt が同時に(又は片方だけ)存在する場合の処理を行いたいと思っています。 File.Exists((@"C:\tmp1\sample1.txt")&&(@"C:\tmp2\sample2.txt")) みたいな書き方はできないんでしょうか? やってみたらNGになったんで質問した次第です。 よろしくお願いします。
664 名前:デフォルトの名無しさん (ワッチョイ c748-AQyI) mailto:sage [2016/11/24(木) 18:09:09.66 ID:4ySrR9x20.net] この場合は if (File.Exists(@"C:\tmp\sample.txt") && File.Exists(@"C:\tmp\sample2.txt")) {} if (File.Exists(@"C:\tmp\sample.txt") || File.Exists(@"C:\tmp\sample2.txt")) {} という風にFile.Existsが2回必要なわけだろ 可変で1個かもしれないし2個以上かもしれないというときは string[] list = { @"C:\tmp\sample.txt", @"C:\tmp\sample2.txt", }; に対してLINQが使える if (list.All(x => File.Exists(x))) {} if (list.Any(x => File.Exists(x))) {}
665 名前:デフォルトの名無しさん (スッップ Sdaf-/sNf) mailto:sage [2016/11/24(木) 18:11:35.21 ID:HdRBGkCMd.net] >>654 Exists(..)を&&で繋げば良いよ。
666 名前:デフォルトの名無しさん (ワッチョイ abdc-MM3T) mailto:sage [2016/11/25(金) 07:04:44.10 ID:9jtEtGtN0.net] >>655 その場合、 list.All(File.Exists) list.Any(File.Exists) の方がスマート
667 名前:デフォルトの名無しさん (JP 0Hdf-sTmH) mailto:sage [2016/11/25(金) 09:44:10.37 ID:55zEIhIxH.net] 654です。 ありがとうございました。 なるほど、パス名を&&でつなげてもだめですね。 File.Exists(・・・)&&File Exists(・・・)を にしなきゃダメですね。 やってみたらうまくいきました。 LINQはあまりわかってないんですが、 やっぱり使えれればかなりコードを書くのが楽になるんでしょうか? 時間ができればやってみてもいいかなぁと思っていますが・・・
668 名前:573 (ドコグロ MMcf-f5kA) mailto:sage [2016/11/25(金) 10:18:27.69 ID:cWogpahDM.net] >>651 >>653 レスありがとうございます。 勉強になります。 徐々に方向性が見えて来たような気がしています。 ありがとうございます。
669 名前:デフォルトの名無しさん (ワッチョイ 37d9-1MTn) mailto:sage [2016/11/25(金) 16:46:17.82 ID:3a2jMeJO0.net] >>655 を見て、RMAX未満のint乱数をN回発生させてori[]が含まれている回数を LINQで数えたいのですが、こんなのになってしまいました もっと簡単に書ける方法はないでしょうか const int N = 10000; const int RMAX = 10; Random r = new Random(); int c = 0; int[] ori = {1, 5}; Enumerable.Range(1, N).Select(i => new { j = r.Next(RMAX) }).Select(i => ori.Any(j => j == i.j)).Where(i => i).Select(i => { c++; return 0; }).ToArray(); // 0〜9の中にori[]が含まれているかどうか調べる Console.WriteLine($"{N}回の繰り返しで 0〜{RMAX - 1} の中にori[]が含まれていたのは {c} 回でした。");
670 名前:デフォルトの名無しさん (オッペケ Sre7-4iO2) mailto:sage [2016/11/25(金) 17:23:50.79 ID:vVyJsUPAr.net] Selectに副作用書くな
671 名前:デフォルトの名無しさん (ワッチョイ c748-AQyI) mailto:sage [2016/11/25(金) 17:46:39.77 ID:k5F1VYSo0.net] つか毎回乱数作ると検証しようがないよな int[] randoms = new int[N]; for (int i = 0; i < N; i++) randoms[i] = r.Next(RMAX); というのがあったと仮定して以下を実行する c = randoms.Where(ori.Contains).Count();
672 名前:デフォルトの名無しさん (ブーイモ MMc7-/sNf) mailto:sage [2016/11/25(金) 17:51:48.96 ID:yM8tzyplM.net] int count = Enumerable.Range(1, N) .Select(_ => r.Next(RMAX) ) .Count(ori.Contains);
673 名前:デフォルトの名無しさん (ワッチョイ 27ba-lM3r) mailto:sage [2016/11/25(金) 23:44:37.58 ID:8749fss/0.net] 検証は普通、同じシードの疑似乱数使うだろ。
674 名前:デフォルトの名無しさん (オッペケ Sre7-4iO2) mailto:sage [2016/11/26(土) 05:41:07.62 ID:BlR4fLnAr.net] そこで、Stateモナド登場。
675 名前:デフォルトの名無しさん (ワッチョイ 37d9-1MTn) mailto:sage [2016/11/26(土) 15:45:30.50 ID:q0gSFGbR0.net] >>661-663 ありがとうございます Select()に副作用書くのはListだとForEach()があるのですが、配列だと使えないので 無理矢理感がありますが許してください(汗
676 名前:デフォルトの名無しさん (オッペケ Sre7-4iO2) mailto:sage [2016/11/26(土) 15:59:56.88 ID:BlR4fLnAr.net] >>666 許せぬ。 普通に>>663 で良いんでないの?
677 名前:デフォルトの名無しさん (ワッチョイ 1349-lVzu) mailto:sage [2016/11/26(土) 16:01:54.05 ID:pkHe6RQg0.net] >>666 ゆるさん。 根本的にLINQの使い方が間違ってる。
678 名前:デフォルトの名無しさん (ワッチョイ 37d9-1MTn) mailto:sage [2016/11/26(土) 16:46:10.56 ID:q0gSFGbR0.net] >>667-668 駄目ですか 精進します >>664 こうやってみました DateTime dt = DateTime.Now; // 乱数のシード値に使う Random r = new Random((int)dt.Ticks); // 乱数測定1 Random r = new Random((int)dt.Ticks); // 乱数測定2 以下続く
679 名前:デフォルトの名無しさん (ワッチョイ 37d9-1MTn) mailto:sage [2016/11/26(土) 16:58:09.08 ID:q0gSFGbR0.net] あ、違った DateTime dt = DateTime.Now; // 乱数のシード値に使う Random r = new Random((int)dt.Ticks); // 乱数測定1 r = new Random((int)dt.Ticks); // 乱数測定2 以下続く
680 名前:デフォルトの名無しさん (ブーイモ MMaf-VGur) mailto:sage [2016/11/26(土) 17:05:31.40 ID:/HuSQ2djM.net] public static class EnumerableEx { public static IEnumerable<int> Randoms(int seed, int max, int count) { var r = new Random(seed); for(int i = 0; i < count; ++i) yield return r.Next(max); }} c = EnumerableEx.Randoms(seed, RMAX, N).Count(ori.Containts);
681 名前:デフォルトの名無しさん (ワッチョイ abdc-MM3T) mailto:sage [2016/11/26(土) 17:27:30.27 ID:UC4M2NKY0.net] >>671 引数のcountは無しで無限ストリームにした方が美しいと思う 有限にしたければTakeで切ればいい
682 名前:デフォルトの名無しさん (オッペケ Sre7-4iO2) mailto:sage [2016/11/26(土) 20:57:24.75 ID:BlR4fLnAr.net] >>670 続きは?
683 名前:デフォルトの名無しさん (オッペケ Sre7-4iO2) mailto:sage [2016/11/27(日) 02:43:47.55 ID:vLOqtuLor.net] public static IEnumrable<T> Randoms<T>(Func<T> next) { while(true) { yield return next(); } } 任意の乱数アルゴリズムを渡せるようにと考えたけど、もはやランダムとは無関係だよねww
684 名前:デフォルトの名無しさん (ワッチョイ abdc-MM3T) mailto:sage [2016/11/27(日) 07:11:41.91 ID:dEf188sX0.net] >>674 名前が既に機能を表してないのはともかく、これは副作用が前提になるからよくない設計 どこかで副作用を使ってない限りnext()は必ず毎回同じ値になるはず
685 名前:デフォルトの名無しさん (ワッチョイ 370b-PVnu) mailto:sage [2016/11/27(日) 13:07:28.68 ID:ZDMyX7Jh0.net] 普通に何がしたいのか分からない
686 名前:デフォルトの名無しさん (ワッチョイ 87ce-w12Y) mailto:sage [2016/11/28(月) 06:20:00.23 ID:d2SeRThv0.net]
687 名前:乱数列をインデックスで参照したいだけ なんでしょ? [] [ここ壊れてます]
688 名前:デフォルトの名無しさん (ワッチョイ 87d4-TEJY) [2016/11/28(月) 20:53:46.42 ID:jgfNB/jg0.net] 実際のプログラムでデリゲート/イベントをどう使うのが便利なのか、理解できる教材・WEBサイト等があれば教えてください
689 名前:デフォルトの名無しさん (ワッチョイ c748-AQyI) mailto:sage [2016/11/28(月) 21:37:11.66 ID:TQQs9y8p0.net] https://msdn.microsoft.com/ja-jp/library/ms173171.aspx
690 名前:デフォルトの名無しさん (ワッチョイ 4f4c-/sNf) mailto:sage [2016/11/29(火) 10:18:57.84 ID:PfRgidpN0.net] 関数ポインタなイメージだわ
691 名前:デフォルトの名無しさん (ワッチョイ 87ce-w12Y) mailto:sage [2016/11/30(水) 00:56:16.15 ID:H3buRLlE0.net] Win32APIのコールバックに渡せる時点で外部からの見え方は関数ポインタそのもの そこにどうやってインスタンもねじ込んでるのか正確には知らないけど 関数ポインタをユニークなヒープ領域に書いてそれを渡して呼び出させる みたいな気持ち悪いことを裏でやってるんだろう
692 名前:デフォルトの名無しさん (ワッチョイ 87ce-w12Y) mailto:sage [2016/11/30(水) 01:03:41.03 ID:H3buRLlE0.net] 少なくとも1度はヒープ上でコード実行してるはずなんだけど スパイウェア認定されたりしないのはなぜだろう
693 名前:デフォルトの名無しさん (ワッチョイ 279d-lM3r) mailto:sage [2016/11/30(水) 01:04:12.90 ID:w8bfAEOD0.net] 動けばいい
694 名前:デフォルトの名無しさん (ワッチョイ a77b-rApL) [2016/11/30(水) 02:53:33.77 ID:5s/CT6+70.net] >679 Msdnの説明なんて99%糞だよな。頭和杉、マクロバカって書いてある本を 見たことがある。 でもたまに凄くわかりやすいのがある。今日まさにそれに出会って 感想欄に MSDNにしては本質をついていてわかりやすい。こんなにわかりやすい せつめいは初めてだ。 これはMSDNの文章とは違う素晴らしい文章だ。たぶん外注のライターが 書いたものだと思うが、こういう外注さんは大事にしなさい。 ありえないとは思うが、もし万が一社員が書いたものならぜひともボーナス を弾んであげてほしい。 と書いておいた。
695 名前:デフォルトの名無しさん (ワッチョイ 5b3c-0AhV) mailto:sage [2016/11/30(水) 02:59:23.96 ID:PzfaC3Zi0.net] 精神を病んでいる様だからカウンセラーにでも相談したまえ
696 名前:デフォルトの名無しさん (ワッチョイ abdc-MM3T) mailto:sage [2016/11/30(水) 07:35:52.74 ID:TOIBVM0F0.net] >>681 マネージコードからの通常のInvokeや一般のクラスやインターフェースの仮想メソッド呼び出しでも JITのために
697 名前:ッ様の仕組みがあるらしい デリゲートが関数ポインタを持ってるんじゃなくて、呼び出し元(call siteという)ごとのキャッシュとして ネイティブ関数を生成するみたいだ [] [ここ壊れてます]
698 名前:デフォルトの名無しさん (ワッチョイ a77b-rApL) [2016/11/30(水) 10:16:51.02 ID:5s/CT6+70.net] Delegateはクラスを着ていない素っ裸の抽象メソッドだと思う。だから デレッってしてる。 クラスと同様にインスタンスを作成して使うけれども抽象メソッドだから 実態のメソッドを代入して使用する。 その時に実態のメッソッドから名前を剝ぎ取った素っ裸のメソッドが ラムダ式だ。 スッポンポンというところがデレゲートとラムダは似ている。
699 名前:デフォルトの名無しさん (ワッチョイ a77b-rApL) [2016/11/30(水) 10:35:50.72 ID:5s/CT6+70.net] delegate int delSm(int i); //型紙delSmを作成する。 void test() { delSm Sm; //型紙delSmから洋服Smを作成 Sm = (x => x * x); //素っ裸のメソッドにSmを着せる int j = Sm(16); //j = 256 }
700 名前:デフォルトの名無しさん (ワッチョイ 5c03-Z4eY) mailto:sage [2016/12/01(木) 16:54:34.62 ID:0Um+ha3M0.net] C#の質問で無く恐縮ですが VS2013でC#コード入力していますが 補完機能の振る舞いがよくわからないことがあります。 例えば"int"と入力する場合 i→n→tとキーインすると 補完候補は"int"の表示が選択されています。 ここでスペースをキーインすると エディタには"iint"と入力されてしまいます。 どういうことでしょうか? returnもrreturnとなってしまいます。