[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 01/09 11:23 / Filesize : 313 KB / Number-of Response : 1016
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっと C#,C♯,C#(初心者用) Part125



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

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もできるのではと思いまして

よろしくお願いします

375 名前:デフォルトの名無しさん (ワッチョイ b77b-eMoa) mailto:sage [2016/11/10(木) 22:55:20.24 ID:pEVMYV3p0.net]
var task1 は、オブジェクトだろ?

当然、コンテナにも入れられる

376 名前:デフォルトの名無しさん (ワッチョイ 4379-teht) mailto:sage [2016/11/10(木) 22:56:21.90 ID:ApowNrKS0.net]
C#の基本を理解していない奴がスレッドに手出したら死ぬからやめておけ

377 名前:デフォルトの名無しさん (ワッチョイ 7f20-teht) mailto:sage [2016/11/10(木) 23 ]
[ここ壊れてます]

378 名前::58:51.41 ID:INda+yqE0.net mailto: >var task1 は、オブジェクトだろ?

オブジェクトと聞いて、下のようなコードを書いたら
期待通りの結果が出ました
ありがとうございます

class Program
{
static async Task ts()
{
List<Task> tsLists = new List<Task>();

List<object> taskArry = new List<object>();
taskArry.Add(Task.Run(() => { Console.WriteLine("1"); }));
taskArry.Add(Task.Run(() => { Console.WriteLine("2"); }));
foreach (var tsk in taskArry)
{
var task = tsk;
tsLists.Add((Task)task);
}
await Task.WhenAll(tsLists);
}
static void Main(string[] args)
{
var t = ts();
t.Wait();
for (;;) ;
}
}

思いつきで書いているので、アンチパターンをしているかも知れませんが。。。
[]
[ここ壊れてます]

379 名前:デフォルトの名無しさん (ワッチョイ 8394-5NgJ) mailto:sage [2016/11/11(金) 02:00:56.00 ID:/+d8XFyb0.net]
>>370のコードの方は、まぁ、普通
(TaskふたつくらいならわざわざListは使わないけど)

しかし、>>373 は……どうしてこうなった



380 名前:デフォルトの名無しさん (ササクッテロリ Sp2f-9MLS) mailto:sage [2016/11/11(金) 02:40:34.81 ID:6sQwg64Zp.net]
ソフトの設定をシリアル化するために一つのクラスにまとめたのはいいけどどうアクセスするのが普通なのかよく分かりません
全部public staticにして直接さわってもいいのでしょうか

381 名前:デフォルトの名無しさん (ワッチョイ b37b-hNMU) mailto:sage [2016/11/11(金) 03:31:49.89 ID:by5SD+CT0.net]
switch文で文字列による分岐をする場合
var hoge="hoge";
// パターン1
var firstChar=hoge.SubString(0,1);
switch(firstChar){
case "a":
 switch(hoge){
  case "akina": ・・・
  case "akiko": ・・・
  case "asaka":: ・・・
  case "amika": ・・・他ずらっと続く
 }
 break;
case "h":
 switch(hoge){
  case "honoka": ・・・
  case "hosaka": ・・・
  case "hoge": ・・・他ずらっと続く
 }
break;
}
// パターン2
switch(hoge){
  case "akina": ・・・
  case "akiko": ・・・
  case "asaka":: ・・・
  case "amika": ・・・
  case "honoka": ・・・
case "hosaka": ・・・
  case "hoge": ・・・
}
パターン1、2でどちらが目的の文字列にたどり着く速度が早いのでしょうか

382 名前:デフォルトの名無しさん (ワッチョイ a70d-Cgco) [2016/11/11(金) 04:06:38.01 ID:qvZdoaA90.net]
... DropShadowEffect.Color="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}},Path=(params:General.ShadowBrush).(SolidColorBrush.Color)}" />

この記述に間違いはありますでしょうか?

383 名前:デフォルトの名無しさん (ワッチョイ 937b-teht) mailto:sage [2016/11/11(金) 04:43:55.58 ID:MLb8BpI60.net]
>>376
後者

384 名前:デフォルトの名無しさん (ワッチョイ 3319-7KSV) mailto:sage [2016/11/11(金) 08:50:36.60 ID:OnmZcNT90.net]
>>377
Path中の括弧は基本的に添付プロパティの指定に使うもんだけど
型明示とかの意味で使おうとしてない?

385 名前:デフォルトの名無しさん (ワッチョイ b77b-eMoa) mailto:sage [2016/11/11(金) 10:27:04.66 ID:M2uBl8fv0.net]
>>373
>List<Task> tsLists = new List<Task>();
>List<object> taskArry = new List<object>();

クラスの継承チェーンでは、Objectクラスがすべてのクラスの基本で、
Object以外のクラスは、すべてそこから派生している。
もちろん、Taskクラスも、Objectクラスの派生クラス

Objectクラスは親クラスで、より抽象的なもの。
Taskクラスは派生クラスで、Objectクラスより具体的で、限定されているため安全だから、
Taskをそのまま使えばいい

Taskクラスは、Objectクラスが持っている、属性・メソッドをすべて持っているから、
そのままObjectクラスとして使える。
(Task)task で、キャストする必要などない

オブジェクト指向を、基本から勉強すべし

386 名前:デフォルトの名無しさん (ワッチョイ b77b-eMoa) mailto:sage [2016/11/11(金) 10:43:07.91 ID:M2uBl8fv0.net]
>>376-378
漏れも、辞書データベースを作る際、
aで始まる単語の表・bで始まる単語の表・cで始まる単語の表、などのように表を分けるか、
すべてを1つの表にするかで迷う

パターン1の方が、先に限定(枝刈り)されるから、速いような気がするけど、
caseが8つ以上あると、コンパイラが最適化して、
文字列をハッシュ化(整数化)するかも知れないので、パターン2の方が速いかも

387 名前:デフォルトの名無しさん (スッップ Sd1f-PwKp) mailto:sage [2016/11/11(金) 12:20:00.46 ID:B0EI7WuJd.net]
トライ木って奴だな
実際Stringのハッシュにこれが使われてるかは知らんが

388 名前:デフォルトの名無しさん (アウアウオー Saff-IeI3) mailto:sage [2016/11/11(金) 12:26:36.61 ID:TqB+9XQ4a.net]
>>376
実験して報告してw
あと、Dictionary<String, Action>を使うケースも追加で

でもまあ、人が手動でコーティングできる程度の分岐では直感的には
後者の方が速そうな気がする。

389 名前:デフォルトの名無しさん (ワッチョイ 4bda-teht) mailto:sage [2016/11/11(金) 12:31:45.60 ID:UQPlBidt0.net]
DictionaryにFunc突っ込んだほうがスッキリしていいだろう



390 名前:デフォルトの名無しさん (アウアウオー Saff-IeI3) mailto:sage [2016/11/11(金) 17:11:54.51 ID:TqB+9XQ4a.net]
>>376
あと細かいことだけど、「分類」に使うのが常に最初の1文字だけなら
素直にcharにした方が(つまりhoge[0])の方が速い気が

391 名前:デフォルトの名無しさん (ブーイモ MM1f-9MLS) mailto:sage [2016/11/11(金) 20:20:29.68 ID:Bi+hCNL7M.net]
>>375
設定クラスとファイルは適度に分割する
staticは使わない
設定読み取りインターフェースとクラスを作る
設定に依存するクラスにインジェクションする

392 名前:デフォルトの名無しさん (ワッチョイ 8fe1-PwKp) mailto:sage [2016/11/11(金) 22:27:34.93 ID:+gNs9Nbk0.net]
>>376
多分後者は最適化でジャンプテーブルに変わるのでそっちのほうが早いかなぁ

393 名前:デフォルトの名無しさん (ワッチョイ b3dc-PwKp) mailto:sage [2016/11/12(土) 00:58:23.88 ID:e739leKk0.net]
>>376
本気で最適化するならプロファイル取って出現頻度順にソート
一般的にそういうのは分布がかなり偏るので統計的に速くなる

394 名前:デフォルトの名無しさん (ワッチョイ 57ce-Cgco) mailto:sage [2016/11/12(土) 08:39:07.19 ID:rgkWnGP70.net]
内部で二分探索やジャンプテーブルに変わろうが、毎回文字列を比較してる時点で遅い
分量が不明ならDictionaryに変えるべき
自分でアルゴリズム実装する場合はC#ではunsafeにしない限り遅い

395 名前:デフォルトの名無しさん (ブーイモ MM6f-9MLS) mailto:sage [2016/11/12(土) 08:56:42.02 ID:NIqnWzQ8M.net]
仮に倍早くなっても辞書をハードコードされたswitchで実装はしたくないな

396 名前:デフォルトの名無しさん (ワッチョイ 57ce-Cgco) mailto:sage [2016/11/12(土) 09:36:17.93 ID:rgkWnGP70.net]
比較前に一意な文字列に変換して、文字列値としてではなくアドレスやハッシュ値を探索するのが一番速いんだけど
そういうのって標準にないんだっけ

397 名前:デフォルトの名無しさん (ワッチョイ a723-teht) mailto:sage [2016/11/12(土) 09:47:10.83 ID:IKX2nQlp0.net]
昔見たLinuxのシェルのソースじゃ最初の方のスイッチ使ったロジックだったな
C言語の文字列の扱いなら速度差もあるかもしれんね

398 名前:デフォルトの名無しさん (ブーイモ MM6f-9MLS) mailto:sage [2016/11/12(土) 10:14:16.67 ID:gzcT9VGJM.net]
>>391
Internというのがある
同じ値の文字列を同じインスタンスの文字列にして返す

399 名前:デフォルトの名無しさん (ワッチョイ 9f02-u2pL) mailto:sage [2016/11/12(土) 15:14:10.12 ID:Ayj+NND50.net]
caseずらずらと並べると、順次検索するのか?
それだとAxxxは早いけどYxxxは遅いとかいうことになると思うんだが
単純にどっちが早いかなんて比較できんわな



400 名前:デフォルトの名無しさん (ワッチョイ 7f17-C1EH) mailto:sage [2016/11/12(土) 15:33:15.88 ID:duqbQJlR0.net]
質問です
アプリにメインのフォームとモードレスなフォームの二つがあります
モードレスなフォームを操作したあとに
メインのフォームのボタンを押そうとすると
メインのフォームへフォーカスをあてるためにワンクリック、
ボタンを押すためにもう一回ワンクリックという具合に
2回クリックしないといけないのですが、
これをワンクリックに縮める方法はなにかありますか?
(一つのウィンドウにまとめる方法以外で)






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<313KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef