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
274 名前:デフォルトの名無しさん (スップ Sd78-DGmA) mailto:sage [2016/11/04(金) 00:41:52.66 ID:j7dIV/6vd.net] 今時XMLやJSON使わないなんて変わった人だねえ
275 名前:デフォルトの名無しさん (ワッチョイ 71cb-DGmA) mailto:sage [2016/11/04(金) 01:07:31.20 ID:S7YCyC790.net] 部品Pを扱う建屋A,C,D,Eとか考えるともうツリーとか邪魔になる
276 名前:デフォルトの名無しさん (ワッチョイ 653c-DGmA) mailto:sage [2016/11/04(金) 01:18:45.12 ID:l35mknxG0.net] >>272 じゃあとりあえず、適当なcsprojをCSVで書いてごらん
277 名前:デフォルトの名無しさん (ワッチョイ 3ee1-umBA) mailto:sage [2016/11/04(金) 01:36:14.39 ID:9ZtkjL7R0.net] >>219 みんな頓珍漢なこと言ってるけど、nullを返さないことを保証するのは需要もあるし、すでに標準ライブラリには導入されてる。 もちろん、空文字を返すよりもnullを返すほうが合理的なこともあるから常にnullを返さないわけではないけど 契約プログラミング(Code Contract) https://msdn.microsoft.com/ja-jp/library/dd264808(v=vs.110).aspx 例えば、String.Concatのソースを見ると https://referencesource.microsoft.com/#mscorlib/system/string.cs,a17e32697e4baaf6 に以下のような契約が書いてある Contract.Ensures(Contract.Result<String>() != null); これは、戻り値がnullではないと保証する、ということ。 逆に、これがない場合はnullを返す可能性を考慮したほうがよい 現状言語仕様レベルでは契約プログラミングは組み込まれていないので、静的な処理をコンパイラの外で行う必要がある もちろん言語仕様に組み込む要望は出てるが、やることが多すぎて手が回ってないのでまだ入りそうにはない https://github.com/dotnet/roslyn/issues/119 Swiftみたいに新しい言語ではnullを許容しない型とかもあるんだけど、なんせC#は15年前の仕様を破壊するわけにいかないので
278 名前:デフォルトの名無しさん (ワッチョイ 3ee1-umBA) mailto:sage [2016/11/04(金) 01:43:43.03 ID:9ZtkjL7R0.net] あ、 >空文字を返すよりもnullを返すほうが合理的なこともあるから常にnullを返さないわけではないけど っていうのは、非null契約が無いメソッドではってことね 非null契約があれば絶対にnullは返さない 非null契約に違反してnullを返そうとすると、静的処理でエラーになるとか、実行時に例外や強制終了になるはず(自分の認識では)
279 名前:デフォルトの名無しさん (ワッチョイ 7213-DGmA) mailto:sage [2016/11/04(金) 01:44:56.97 ID:fGBbyDJX0.net] XMLやJSONを使わせないとか老害もいいとこだな
280 名前:デフォルトの名無しさん (ワッチョイ 71cb-DGmA) mailto:sage [2016/11/04(金) 08:12:03.85 ID:S7YCyC790.net] >>276 データをDBに移しますね の一言でend そしてそれはあるあるNo1
281 名前:デフォルトの名無しさん (スフッ Sd28-DGmA) mailto:sage [2016/11/04(金) 08:13:58.66 ID:eeRk3Y1vd.net] DBに入れるならDBnullなんでは?
282 名前:デフォルトの名無しさん (スフッ Sd28-DGmA) mailto:sage [2016/11/04(金) 08:15:29.14 ID:eeRk3Y1vd.net] あ、言葉足らずだったな。 DBnullに相当する値か状態を表現したクラスしかないのでは?って。 重いとは思うが、それをXMLにあてればいいと思うけど。
283 名前:デフォルトの名無しさん (ワッチョイ b0da-uTye) [2016/11/04(金) 08:19:28.81 ID:Oa4odGBb0.net] 複数の少数があります 1.5, 3.25, 6.75, 3.375 .... これら全てが整数になる共通の値を見つけたいのですが、何かいい方法はないでしょうか? 単純に小数点以下が一番長い物に合わせて、1000倍などにしてもいいのかもしれませんが、 できるだけ最小の値にしたいと考えています
284 名前:デフォルトの名無しさん (ワッチョイ b0da-uTye) [2016/11/04(金) 08:22:04.24 ID:Oa4odGBb0.net] あ、↑は小数を乗算して整数になる、共通で最小の値という意味です 乗算について抜けていましたすみません
285 名前:デフォルトの名無しさん (ワッチョイ 91dc-dKGq) mailto:sage [2016/11/04(金) 08:37:27.49 ID:Fu63hJgb0.net] 10^n倍して全部整数にしてから最大公約数で割れば
286 名前:デフォルトの名無しさん (ワッチョイ e63c-DGmA) mailto:sage [2016/11/04(金) 08:40:47.32 ID:sU8qFob40.net] >>268 リレーションがなんのためにあると思ってるんだ? w
287 名前:デフォルトの名無しさん (ワッチョイ 3223-8n5s) mailto:sage [2016/11/04(金) 08:41:56.32 ID:Nv4A79J/0.net] >>281 小数点以下を分数に変換して最小公約数を求めたら良いんじゃないの?
288 名前:デフォルトの名無しさん (ワッチョイ 71cb-DGmA) mailto:sage [2016/11/04(金) 08:53:29.87 ID:S7YCyC790.net] >>283 それでいいんだよ xmlで階層にすると悲劇が始まる idかkey置いて階層は作らないのが正解
289 名前:デフォルトの名無しさん (スップ Sd78-DGmA) mailto:sage [2016/11/04(金) 08:56:20.60 ID:jjNRFD+ud.net] >>285 >>273
290 名前:デフォルトの名無しさん (ササクッテロレ Spbd-m5qj) mailto:sage [2016/11/04(金) 08:59:28.30 ID:cFPdUXQMp.net] >>280 単純に10のn乗をかけると循環小数で詰むので分数化するに一票
291 名前:デフォルトの名無しさん (ワッチョイ 7213-DGmA) mailto:sage [2016/11/04(金) 09:01:06.22 ID:fGBbyDJX0.net] 環境設定ファイルとかクラスをシリアライズするだけで済むのにわざわざDB化するとか馬鹿馬鹿しいわ
292 名前:デフォルトの名無しさん (スフッ Sd28-DGmA) mailto:sage [2016/11/04(金) 10:48:32.91 ID:eeRk3Y1vd.net] 120120掛けて、それでもだめなら17掛けて、あとは2から割っていくと良いのでは? それで端数が出たら、素数で割ってけば良いよ。 だいたい23くらいまで持ってたらきれいな数字になる。 分数化は面倒だろ。
293 名前:デフォルトの名無しさん (アウアウオー Sade-MAch) mailto:sage [2016/11/04(金) 12:29:37.50 ID:whUy0fqsa.net] >>280 宿題スレかお題スレの方がいいと思うけど、 a = 1.5, b = 3.25, c = 6.75, .... 与えられたすべての小数を整数にする最小の10の乗数をRとする 求める共通の値xが見つかったとき、a * x, b * x, c *x, ....は1以外の公約数を 持たないはずだから(ただしa, b, c, ....がすべて同じ値である場合を除く) a * R, b * R, c * R, ....の最大公約数をGとするとき、 x = R / G でいいような気がする。 厳密な証明は知らん
294 名前:デフォルトの名無しさん (ドコグロ MMde-DGmA) mailto:sage [2016/11/04(金) 14:08:33.75 ID:T6Zzc5iHM.net] >>285 お前は Excel 使っとけ w
295 名前:デフォルトの名無しさん (ドコグロ MMde-DGmA) mailto:sage [2016/11/04(金) 14:10:31.34 ID:T6Zzc5iHM.net] >>287 単純に分数にすると無理数で詰むので...
296 名前:デフォルトの名無しさん (ワッチョイ d30d-uTye) [2016/11/04(金) 14:56:57.15 ID:al1IuUx20.net] WPF、MVVMで ファイルやフォルダの一覧を階層構造のTreeViewで表示したいのですが EnumerateFileSystemEntries を使って実装する方法を教えてください 参考になるサイトやサンプルでも構いません 自分で探してみても単に取得する処理だけのもの(Viewへの適用などが無い)などしか見当たらず困っています
297 名前:デフォルトの名無しさん (アウアウカー Sab5-DGmA) mailto:sage [2016/11/04(金) 15:41:50.56 ID:zqM+jrKca.net] >>292 数学的に無理数の範囲でこの問題って解けるのか? 有理数じゃないと無理な気がするけど
298 名前:デフォルトの名無しさん (アウアウカー Sab5-DGmA) mailto:sage [2016/11/04(金) 15:47:46.77 ID:zqM+jrKca.net] 解けないっていうか、特殊な場合を除きほとんど場合解なしが解になると思う
299 名前:デフォルトの名無しさん (ワッチョイ bcdc-dKGq) mailto:sage [2016/11/04(金) 16:23:04.07 ID:V0keAHui0.net] >>293 オブジェクトツリーが作れたらItemsSourceに放り込んでHierarchicalDataTemplateを定義するだけ
300 名前:デフォルトの名無しさん (ワッチョイ 8a02-2mfK) mailto:sage [2016/11/04(金) 21:51:02.32 ID:tYyOp6nC0.net] >>294-295 そもそも求める数が整数とか有理数に限るとはどこにも書いてないがな
301 名前:デフォルトの名無しさん (ワッチョイ 3223-8n5s) mailto:sage [2016/11/04(金) 22:23:15.39 ID:Nv4A79J/0.net] 分数の上下桁数を2桁とか3桁程度の実用的な範囲にして、近似値で分数に変換すれば問題ないでしょ 求めたいものが何であるかによるけどね
302 名前:デフォルトの名無しさん (ワッチョイ bcdc-DGmA) mailto:sage [2016/11/05(土) 00:26:17.96 ID:u9ZZUUBm0.net] >>298 当てずっぽうでやるんならわざわざ分数化しなくても 最初から試しに乗算してみて整数っぽくなったらOKでいいだろw
303 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) mailto:sage [2016/11/05(土) 09:41:59.67 ID:OZKlek+X0.net] ストレージの評価のため、ファイルを同時書き込みするメソッドを asyncで書いてみたのですが、100回くらいfor文でコールすると logx.txtが12個とかしか作られません 処理時間で処理が打ち切られたりするのでしょうか? private static async void TestM(string i) { using (FileStream fs=new FileStream(@"F:\work\log" + i + ".txt", FileMode.Append, FileAccess.Write, FileShare.ReadWrite)) { StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8); TextWriter tw = TextWriter.Synchronized(sw); tw.WriteLine("test"); tw.Flush(); } } static void Main(string[] args) { for(int i = 0; i < 100; i++) TestM(i.ToString()); }
304 名前:デフォルトの名無しさん (ワッチョイ bcdc-dKGq) mailto:sage [2016/11/05(土) 09:56:26.86 ID:u9ZZUUBm0.net] async(というかTask)はデフォルトではスレッドプールを使うから 同時に使用されるスレッド数には限りがあり、残りのタスクはキューに溜まるだけ 普通にnew Threadしたら
305 名前:デフォルトの名無しさん (ワッチョイ e63c-DGmA) mailto:sage [2016/11/05(土) 10:06:58.71 ID:6wNzhQFs0.net] >>297 > そもそも求める数が整数とか有理数に限るとはどこにも書いてないがな えっ? >>280 > これら全てが整数になる共通の値を見つけたい
306 名前:301 (ワッチョイ bcdc-dKGq) mailto:sage [2016/11/05(土) 10:09:53.89 ID:u9ZZUUBm0.net] >>300 いやそもそもasyncの使い方がおかしいな
戻り値voidの場合、awaitが無いとasyncキーワードは全く何の意味も持たない ワーニング出てるだろ? (意図とは違うだろうけど)TestMは普通に同期で順番に実行されてるはずだから、 単にswやtwを閉じてないために出力されてないだけじゃないか? あとasync void使うな
307 名前:デフォルトの名無しさん (ワッチョイ 5194-rqdB) mailto:sage [2016/11/05(土) 10:38:43.04 ID:9mC8a8qM0.net] >>300 >>303 の言うとおり非同期実行ではなく順番に一個ずつ書き込んでいってるはずだから Mainのforループがエラーなく最後まで回っているかを確認してみたら
308 名前:300 (ワッチョイ 7220-8n5s) mailto:sage [2016/11/05(土) 19:19:50.22 ID:OZKlek+X0.net] 根本的に非同期処理のやり方が間違っていただけなんですね 精進します
309 名前:デフォルトの名無しさん (ワッチョイ 0117-7tG6) mailto:sage [2016/11/05(土) 20:30:25.56 ID:ds+C0ndM0.net] まあネットで調べただけだと勘違いしやすいよね。 そういう風にしか書かれてないとこ多いもん。
310 名前:デフォルトの名無しさん (ワッチョイ 1541-nJsM) [2016/11/05(土) 21:34:08.85 ID:q4/6QuN40.net] 書き散らしてるクソブログ多いもんなぁ 分かったフリして書く ↓ それを読んで分かった気になる 以下ループ
311 名前:デフォルトの名無しさん (ワッチョイ 9030-Tcji) mailto:sage [2016/11/05(土) 21:42:26.72 ID:BoxZvYjG0.net] 最近だとQiitaの「自分用メモ」がひでえ お前用のゴミを公開するな 非公開で保存できるんだから
312 名前:デフォルトの名無しさん (ワッチョイ 71cb-DGmA) mailto:sage [2016/11/05(土) 22:52:00.60 ID:iEc26fmZ0.net] 昔は公開しておくといちいち指摘してくれてそれで正しい情報になっていったが いまブログ書いてるやつがどういうつもりかわからんし触りにくいってのあるよなぁ お節介やいてストーキングまでされたらたまらんし 殴り合い上等でブログやってる人ならいいが 最近打た
313 名前:れ弱いくせに公開するアホ増えたからなぁ [] [ここ壊れてます]
314 名前:デフォルトの名無しさん (ワッチョイ 21c8-umBA) mailto:sage [2016/11/06(日) 17:53:34.18 ID:RAhQzM620.net] WPFでデータバインドする際の INotifyPropertyChanged の実装方針について教えてください。 GUIにバインドするクラスに以下のような2つのプロパティがあるとき int Value { set; get; } int Value2 { get { return this.Value * 2 } } Value の値が変わると自動的に Value2 の結果も変動するため、 Value の setter で、Value、Value2 の2つの PropertyChanged を投げる実装をしました。 しかし、Value が Value を利用してるプロパティの面倒まで見ることに違和感を覚えます。 これは INotifyPropertyChanged の仕様として仕方が無いのでしょうか。
315 名前:デフォルトの名無しさん (ワッチョイ 01d6-8n5s) mailto:sage [2016/11/06(日) 19:37:13.87 ID:jO0QNoEc0.net] 仕方ない 氏名と名字、名前でも同じだしね
316 名前:デフォルトの名無しさん (ワッチョイ 137b-A9qr) mailto:sage [2016/11/06(日) 20:19:58.80 ID:A8MT+yST0.net] どうしてもってなら自分自身のPropertyChangedにイベント引っかけて Valueが変更されてたらValue2のPropertyChanged起こすとかできるけど 同一クラス内でそんなの別に気にする必要もないんじゃね?
317 名前:310 (ワッチョイ 21c8-umBA) mailto:sage [2016/11/06(日) 20:34:01.49 ID:RAhQzM620.net] >>311 >>312 ありがとうございます。そのままの実装で作ってみます。
318 名前:デフォルトの名無しさん (オッペケ Srbd-X2H6) mailto:sage [2016/11/07(月) 16:48:49.99 ID:oxea6kUxr.net] >>252 コードレビューで散々ごねて書き直しさせた人がいましたww
319 名前:デフォルトの名無しさん (オッペケ Srbd-X2H6) mailto:sage [2016/11/07(月) 16:51:52.12 ID:oxea6kUxr.net] >>274 こんな事まで勉強してる人は滅多にいないかな。 それを言って理解出来る人も極めた少数派。
320 名前:デフォルトの名無しさん (オッペケ Srbd-X2H6) mailto:sage [2016/11/07(月) 16:55:30.10 ID:oxea6kUxr.net] >>307 あるあるww
321 名前:デフォルトの名無しさん (アウアウオー Sade-MAch) mailto:sage [2016/11/07(月) 17:15:04.36 ID:RVVbQ4DBa.net] >>315 悪いけど、その程度のことは知ったうえでその質問者を批判してる人の方が多いと思うよw
322 名前:デフォルトの名無しさん (ワッチョイ 9823-KjJO) mailto:sage [2016/11/07(月) 19:06:22.15 ID:JC+EsK6v0.net] うん…言葉尻を捉えるようだがContractで極めたは言い過ぎだな 実装が気になればReferenceSourceを見るのは普通だし 解説としてメジャーなufcpp.netでも触れられている 言語の詳細に興味がない、学ぶ気概がない人はそもそも…
323 名前:デフォルトの名無しさん (オッペケ Srbd-DGmA) mailto:sage [2016/11/07(月) 19:10:13.37 ID:Msy9mjY5r.net] 変数名規則どうしてる? フィールド publicなのは大文字開始でいいけど privateなのをどうするか悩む m_Hogeまたはm_hoge f_Hogeまたはf_hoge _Hogeまたは_hoge
324 名前:デフォルトの名無しさん (ワッチョイ e9dc-DGmA) mailto:sage [2016/11/07(月) 19:52:43.99 ID:07KTk/ms0.net] 一番人気はJavaのスタイルに合わせてhoge 10馬身差で_hogeとm_hogeじゃないか
325 名前:デフォルトの名無しさん (アウアウオー Sade-MAch) mailto:sage [2016/11/07(月) 19:53:21.45 ID:RVVbQ4DBa.net] バッキングフィールドは_hoge それ以外のフィールドはmHoge
326 名前:デフォルトの名無しさん (ワッチョイ 45bd-bOSl) [2016/11/07(月) 20:47:02.70 ID:PlwpY0UQ0.net] Qiitaですげえイラッとする内容で、 ライブラリやツールつかって、やたら「簡単にできる」みたいなことを押す論調で、 紹介している奴。 「簡単にできる」 = 「自分自身で何やってるか、何が変わったかよくわからなく なる」ということであって、 どうなるかの仕組みを考察したり解説したりするならいいが、 その盲点を無視して、 「ね?猿でもこんなこと簡単にできるでしょ?」 「使わなきゃ損でしょ?」とかはしゃいでいるガキには、物事を説明する 資格はない。そんな有害な記事はネットに上げるな。
327 名前:デフォルトの名無しさん (アウアウオー Sade-MAch) mailto:sage [2016/11/07(月) 21:36:50.71 ID:RVVbQ4DBa.net] 誰と戦ってるおつもりなのかねw ばっかじゃなかろうか
328 名前:デフォルトの名無しさん (オッペケ Srbd-X2H6) mailto:sage [2016/11/07(月) 22:21:11.52 ID:JoerH3dAr.net] >>318 ごめんなさい。 極めて少数派 の打ち間違いです。
329 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) mailto:sage [2016/11/07(月) 23:00:37.04 ID:geFZXkbd0.net] JSONで、”[[[1,2],[2,3]]]”のようなアウトプットがしたく いろいろ探して下記のようなコードで出力できることは 解ったのですが JavaScriptSerializer seri = new JavaScriptSerializer(); var list = new[] { new[] { new[] {1,2 }, new[] { 2, 3 } } }; string json = seri.Serialize(list); //出力結果:[[[1,2],[2,3]]] これを [[[1,2],[2,3],[3,4]...]] のように動的に追記していくには どのように書いたら良いのでしょうか? コレクションのように .Add() で次々書けたら良いなと思うのですが よろしくお願いします
330 名前:デフォルトの名無しさん (ワッチョイ e9dc-dKGq) mailto:sage [2016/11/07(月) 23:09:18.73 ID:07KTk/ms0.net] >>325 本題の前に、 https://msdn.microsoft.com/ja-jp/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx > Json.NET should be used serialization and deserialization. とMS様もぶっちゃけてる通り、.NETでJSONを使うならJavaScriptSerializerではなく デファクトスタンダードであるJson.NETを使いましょう でJson.NETについて言うと、普通にList<T>をシリアライズすればJSONの配列になる。 事前に配列にしたいならToArrayすればいい。
331 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) mailto:sage [2016/11/07(月) 23:15:49.87 ID:geFZXkbd0.net] 根本的にJavaScriptSerializerは推奨されない技術だったのですね Json.NETを検討してみます ありがとうございます
332 名前:デフォルトの名無しさん (ドコグロ MMde-DGmA) mailto:sage [2016/11/08(火) 07:59:18.34 ID:kkRkk3iCM.net] >>322 お前もQiitaとやらで 超難しい!超時間掛かる! 簡単とか言ってるやついるけどぶっちゃけ難解! 人類には早すぎた! って記事かけや
333 名前:デフォルトの名無しさん (ワッチョイ 7b49-XA/h) mailto:sage [2016/11/08(火) 21:00:12.94 ID:360M0HJP0.net] >>301 TaskCreationOptions.LongRunningオプション付けてTaskを生成すれば専用のThreadになるから、生のThreadを使う必要ないよ。 それかスレッドプールの同時実行数をチューニングする方法もある。
334 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) mailto:sage [2016/11/08(火) 21:46:12.39 ID:xSnQLWcm0.net] 昨日、jsonの質問をした者ですが json.netに変更した所で、やはり同じところで悩んでいます 下記コードで出力結果が"[[[1,2],[2,3]]]"となるのですが var list = new[] { new[] { new[] {1,2 }, new[] { 2, 3 } } }; string json = Newtonsoft.Json.JsonConvert.SerializeObject(list); これを [[[1,2],[2,3],[3,4]...]] のように動的に追記していくには どのように書いたら良いのでしょうか? 色々調べても、jsonはキーバリューの形が一般的で 配列でどう表現するのか解りませんでした よろしくお願いします
335 名前:デフォルトの名無しさん (ワッチョイ e9dc-dKGq) mailto:sage [2016/11/08(火) 22:10:11.42 ID:ic1oOtKi0.net] だからList<T>使えよ JSON云々以前の問題
336 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) mailto:sage [2016/11/08(火) 23:23:57.86 ID:xSnQLWcm0.net] List<T>のアドバイスをもとに 以下のようなコードで良い感じになってきたのですが もう一つ配列の外カッコを表現することができませんでした List<int[]> list = new List<int[]>(); list.Add(new[] { 1, 2 }); list.Add(new[] { 2, 3 }); list.Add(new[] { 3, 4 }); string json = Newtonsoft.Json.JsonConvert.SerializeObject(list); //[[1,2],[2,3],[3,4]] List<int[][]> list = new List<int[][]>();にすると [[[1,2]],[[2,3]]]となってしまい 詰まっております 根本的に考え方が間違っているのでしょうか?
337 名前:デフォルトの名無しさん (ワッチョイ 653c-m5qj) mailto:sage [2016/11/08(火) 23:35:34.26 ID:qV47zIVg0.net] だからなぜ配列使うのかと…
338 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) mailto:sage [2016/11/08(火) 23:55:21.12 ID:xSnQLWcm0.net] すみません 経験不足で、配列以外でやる方法が 想像つきません どういうイメージでやれば良いのか 教えて頂きたいです
339 名前:デフォルトの名無しさん (ワッチョイ 0117-7tG6) mailto:sage [2016/11/09(水) 00:02:28.77 ID:hsAPe+Q00.net] そこは置いとくとして。これで解決したりしてな。(試してない) 解決なら変数の内容というか意味を考えるべきだな。 var list2 = (new List<int[][]>()); list2.Add( list.ToArray() ); // list2 をシリアライズ
340 名前:デフォルトの名無しさん (ササクッテロレ Spbd-m5qj) mailto:sage [2016/11/09(水) 03:15:10.85 ID:qcMduGDNp.net] JSONの形だけでいいならこんなのでもいい List<int[]>[] list3= {list}; int[][][] list4= {list.ToArray()};
341 名前:デフォルトの名無しさん (ワッチョイ e93a-DGmA) mailto:sage [2016/11/09(水) 03:33:35.81 ID:KnEUpDo20.net] >>332 List<List<List<int>>>
342 名前:デフォルトの名無しさん (ワッチョイ 517b-8n5s) mailto:sage [2016/11/09(水) 05:25:22.53 ID:moqMbmIT0.net] >>332 とりあえずその部分に納得したいならこうやれば形になるよw var list = new[] { new List<int[]>() }; list[0].Add(new[] { 1, 2 }); list[0].Add(new[] { 2, 3 });
343 名前:デフォルトの名無しさん (ササクッテロレ Spbd-m5qj) mailto:sage [2016/11/09(水) 14:02:25.71 ID:qcMduGDNp.net] 多分これ>>332 は理解できないだろw 前提1: JSONはJavaScript Object Notationの略でjavascriptの文法をベースにした記法である 前提2: javascriptは動的型付け原語であり、C#は 静的型付け原語である 前述3: JSONにおける配列は[]で表され、C#のList<T>と配列はJSONの配列に変換される 前提1,2からC#で必要な型の情報はJSONには記述されないため、JSONをC#に変換する場合この型情報を補完しなければならない 前提3から動的な操作を行う個所はList<T>それ以外を配列で記述するといい 学習または理解のために C#でもコンパイラによる型推論によって型宣言を省略できるが、理解するまでは省略せずに型をきちんと書く方が理解しやすい よってvar禁止、初期化時の型宣言の省略禁止でそれぞれを書き換えてみると多少理解が進むんでないかな? 例として>>338 のlistと>>336 のlist3は省略せずに書くと以下のようになり同じものであるとわかる。 List<int[]>[] list = new List<int[]>[] { new List<int[]>() }; ※ List<int[]>[] は intの配列(int[]) の リスト(List<T>) の 配列(末尾の[]) という意味 ※ varは、右辺で型が明らかな場合コンパイラが型を推定して補完してくれる。コンパイル時に展開されるので省略せずに型を書くのと等価になる
344 名前:デフォルトの名無しさん (ワッチョイ 3e4c-DGmA) mailto:sage [2016/11/09(水) 14:19:57.52 ID:ESFv9usG0.net] >>339 優しいなおめぇ
345 名前:332 (ラクッペ MM2d-DGmA) mailto:sage [2016/11/09(水) 17:18:24.33 ID:ItbFMo65M.net] 試行錯誤の結果 教えて頂いたList<T>にて 希望のjsonを作れました 基礎的な理解もなく ネットで得る断片的なソースの コピペでは応用が効かないと痛感しています ありがとうございます
346 名前:デフォルトの名無しさん (オッペケ Srbd-X2H6) mailto:sage [2016/11/09(水) 19:36:58.06 ID:z4p8v0swr.net] コピペは止めとけ。 Ctrl-C,Vを禁止するだけでプログラミング能力が上がるとか何とか。
347 名前:デフォルトの名無しさん (ブーイモ MM31-m5qj) mailto:sage [2016/11/09(水) 20:18:59.79 ID:GH2RO7KKM.net] コピペした回数により残業代減額
348 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) [2016/11/09(水) 21:32:55.41 ID:xe8Gs44h0.net] LINQのSelectで、メンバ「txt」が"a"の場合、 メンバ「intdata」の符号を反転するということをしたいのですが、 どのように書けば良いのでしょうか? LINQで条件式が書けるとコードが随分小さくなるので 助かります!!! class testClass { public string txt { get; set; } public int intdata { get; set; } } static void Main(string[] args) { List<testClass> ts = new List<testClass>(); ts.Add(new testClass { txt = "a", intdata = 1 }); ts.Add(new testClass { txt = "b", intdata = 2 }); var tsFnc = ts.Select(e => e.txt == "a" ? e.intdata = e.intdata * -1); //←エラー }
349 名前:デフォルトの名無しさん (ブーイモ MM31-m5qj) mailto:sage [2016/11/09(水) 21:46:02.27 ID:GH2RO7KKM.net] e.txt == "a" ? new testClass() { txt = e.txt , intdata = -e.intdata } : e
350 名前:デフォルトの名無しさん (ワッチョイ e9dc-dKGq) mailto:sage [2016/11/09(水) 21:58:25.28 ID:EZkCstT40.net] それインラインのラムダで書いてしまうとコードの意図がわかりにくいから static testClass Hoge(testClass e) => (>>345 ); のようにメソッドとして外出しした上で ts.Select(Hoge) と書くのがいいんじゃないかな メソッド本体をラムダの形式でスマートに記述できるようになったことだし、 ちょっと複雑なラムダには積極的にメソッド名を付けることを心がけるといい
351 名前:デフォルトの名無しさん (ササクッテロレ Spbd-m5qj) mailto:sage [2016/11/09(水) 22:25:47.94 ID:qcMduGDNp.net] >>344 そりゃ値を返さなければエラーになるよな ts.Select( (e) =>{ if(e.txt=="a") e.intdata*=-1; return e; });
352 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) [2016/11/09(水) 22:41:05.99 ID:xe8Gs44h0.net] >>347 期待した結果が出ました。 ありがとうございます!!! 色んなサイトを回ったのですが、なかなか条件式を書いているサンプルが無かったもので、助かります!!!
353 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) mailto:sage [2016/11/09(水) 22:44:01.71 ID:xe8Gs44h0.net] >>346 従来のやり方を単純にラムダに変えるのではなく、 ラムダ的なスマートさも追及すべきということですね。 参考になります。
354 名前:デフォルトの名無しさん (ワッチョイ 7220-8n5s) mailto:sage [2016/11/09(水) 22:49:39.71 ID:xe8Gs44h0.net] ラムダというかLINQは凄い便利なんですけど、 なんか重いんですよね。 やぼったく書いていた処理をラムダにしたら 可読性が上がった反面、処理に倍の時間がかかるようになってしまい。。。 便利ゆえの宿命なのか、 使いこなせてないだけなのか、 その両方かって気がしています。
355 名前:デフォルトの名無しさん (ワッチョイ 5eed-DGmA) mailto:sage [2016/11/09(水) 22:52:28.34 ID:GViSYmlw0.net] 適宜ToArrayしろってResharperが言ってた
356 名前:デフォルトの名無しさん (ワッチョイ 8a02-2mfK) mailto:sage [2016/11/09(水) 23:09:04.87 ID:xK7OwzcU0.net] LINQにしたら倍ほど遅くなるコードって例えばどんなん?
357 名前:デフォルトの名無しさん (ワッチョイ e9dc-dKGq) mailto:sage [2016/11/09(水) 23:23:27.68 ID:EZkCstT40.net] >>347 はないわ インプレースで更新するんなら普通に foreach (var e in ts) if (e.txt == “a”) e.intdata *= 1; でいいだろ 副作用がないように見えてこっそり更新してるってのは罠に近い極めてタチの悪いコード
358 名前:デフォルトの名無しさん (ブーイモ MM31-m5qj) mailto:sage [2016/11/09(水) 23:31:35.24 ID:GH2RO7KKM.net] >>352 実処理がメソッド呼び出しオーバーヘッドより少ない時かな ボトルネックにはならないけど倍以上にはなる
359 名前:デフォルトの名無しさん (ワッチョイ f023-8n5s) mailto:sage [2016/11/09(水) 23:31:54.26 ID:0UIYYtz/0.net] もしLinqでやりたいのならForEachの拡張メソッドを書くか、IxをNuGetで入れるほうが健全だな
360 名前:デフォルトの名無しさん (ワッチョイ 9f02-u2pL) mailto:sage [2016/11/10(木) 01:11:52.00 ID:gZ1S6RPu0.net] >>354 サンプルコードある? その論理でいくと、実処理がゼロの時が最も顕著で 通常のループよりLINQでのループ(列挙)が倍以上遅いってことになるんだが 繰り返し判定が遅いのかループの準備が遅いのか知らんが LINQのほうが多少遅いとしても、どれだけ回したら有意な差がでるほどオーバーヘッドあるんだ
361 名前:デフォルトの名無しさん (ワッチョイ 8fe1-PwKp) mailto:sage [2016/11/10(木) 01:38:07.59 ID:zCCtWAZL0.net] 何万回も回すとか、コンパイラを作るとかじゃなければメソッド呼び出しのコストはほぼ無視できるはず たぶん、無駄のある書き方してるか、最適化を邪魔するような記述になってるんじゃないかな
362 名前:デフォルトの名無しさん (ブーイモ MM6f-9MLS) mailto:sage [2016/11/10(木) 01:48:41.09 ID:4pFcdHJlM.net] >>356 だからボトルネックにはならないって書いたじゃん 倍になろうが大したことない 遅い派の人は処理オーダー違うアルゴリズムと比較してるんだろ
363 名前:0-WVKM) mailto:sage [2016/11/10(木) 02:05:10.17 ID:wdbpo9Rt0.net] 倍遅いって記述がアレで単にループ倍増しているだけじゃね
364 名前:347 (ワッチョイ 033c-9MLS) mailto:sage [2016/11/10(木) 02:45:22.58 ID:BAuxaWeL0.net] >>353 いや俺に言われても>>344 が求めてるのは "LinqのSelectで〜メンバ「intdata」の符号を反転する" 方法だからな 要求仕様がLinqのSelectで行うことを明示していて、intdataの反転した別インスタンスを返すではなくメンバ変数を反転すると定義しているならそう書くだけだ こんな書き方するべきじゃないってのはその通りだがそれは>>344 に言ってくれ
365 名前:デフォルトの名無しさん (オッペケ Sr2f-WFrU) mailto:sage [2016/11/10(木) 03:27:07.24 ID:+tyQ2nEUr.net] 副作用は書かないのがコツ。 >>345 が考え方としてはよろしい。
366 名前:デフォルトの名無しさん (オイコラミネオ MMdf-h9op) mailto:sage [2016/11/10(木) 09:30:47.14 ID:SIcifk3eM.net] IxとRxってどう違うの
367 名前:デフォルトの名無しさん (アウアウオー Saff-IeI3) mailto:sage [2016/11/10(木) 10:49:41.41 ID:otGHoxmha.net] 普通に考えてそもそもSelectを使うのがおかしいw >>353 は途中まで普通のこと言ってるのに>>345 は否定しないのはおかしいw
368 名前:デフォルトの名無しさん (ワッチョイ b3dc-PwKp) mailto:sage [2016/11/10(木) 12:52:58.94 ID:+0vOVL7/0.net] >>347 は副作用ないしインスタンスの同一性に拘らないなら目的は果たせてるだろ 分かりにくい糞コードかもしれないが、コードの形をした糞である>>347 のように完全否定されるほどのものではないよ
369 名前:デフォルトの名無しさん (ワッチョイ 033c-9MLS) mailto:sage [2016/11/10(木) 13:14:42.66 ID:BAuxaWeL0.net] こういう議論が面倒だから>>344 の要求に忠実に書いた訳だが… そもそもSelectを使うのが間違いというのは議論の余地がないからいいとして、副作用を避けるなら>>345 はないわw 元のインスタンスと別インスタンスとを混在させて返すってのは罠じゃないのかと new testClass() { txt = e.txt , intdata = e.intdata*(e.txt=="a"?-1:1) }; 別インスタンスを返すなら符号の反転の有無に関わらず必ず別インスタンスで返すべき
370 名前:デフォルトの名無しさん (ワッチョイ a723-teht) mailto:sage [2016/11/10(木) 13:43:53.32 ID:o8sMendu0.net] つか、select使わずに拡張メソッド作ったほうがよくね 例えばこんなやつ ideone.com/YQ5uTI
371 名前:デフォルトの名無しさん (ワッチョイ a70d-Cgco) [2016/11/10(木) 20:14:55.52 ID:jVtZ8e8U0.net] WPFでVisual StudioのようなタブやドッキングウィンドウがあるUIを作りたく思い そのようなテンプレートを探しています 「AvalonDock」というものは見つけましたが他にご存知なら教えてください
372 名前:デフォルトの名無しさん (ブーイモ MMef-9MLS) mailto:sage [2016/11/10(木) 20:37:33.96 ID:uFjDSD4sM.net] >>365 もう少し視野を広くした方がいい データ転送オブジェクトや値オブジェクトといったワードで検索してごらん そのあとはクエリ・コマンド分離の原則を調べよう
373 名前:デフォルトの名無しさん (オッペケ Sr2f-WFrU) mailto:sage [2016/11/10(木) 21:24:48.41 ID:+tyQ2nEUr.net] >>366 それの有り難みが理解出来る人は人類では、ほとんどいないw
374 名前:デフォルトの名無しさん (ワッチョイ 7f20-teht) mailto:sage [2016/11/10(木) 22:02:45.75 ID:INda+yqE0.net] 下のようなコードで動的な数のtaskを作ることは できるでしょうか? static async Task ts() { List<Task> tsLists = new List<Task>(); var task1 = Task.Run(() =>{/*処理*/}); var task2 = Task.Run(() => {/*処理*/}); tsLists.Add(task1); tsLists.Add(task2); await Task.WhenAll(tsLists); } Task.WhenAllに配列を含めることができるのなら taskもできるのではと思いまして よろしくお願いします