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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 7bde-MYX9)
垢版 |
2017/11/07(火) 21:11:25.20ID:LeQqgpmT0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part132
http://mevius.5ch.net/test/read.cgi/tech/1507543256/

■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/11/14(火) 22:12:26.72ID:D89+JmTA0
>>346
だから例外で帰られちゃ困るのよ
ちゃんと仕様で動作が決まってるのにもかかわらずそのメソッド的には例外なの
2017/11/14(火) 22:17:45.36ID:sSxxq2Sz0
例外を拾ってエラーチェックをしようとしているのが根本的な間違いだな。
2017/11/14(火) 22:28:42.81ID:D89+JmTA0
>>349
バッカ、飛んでっちゃうだろ
351デフォルトの名無しさん (ワッチョイ 5f75-7wKg)
垢版 |
2017/11/14(火) 22:33:03.34ID:Xx2aI1jk0
仕分けとは
握りつぶしとは
2017/11/14(火) 22:41:27.61ID:D89+JmTA0
>>351
アスペにもほどがあるだろ
353デフォルトの名無しさん (ワッチョイ 5f75-7wKg)
垢版 |
2017/11/14(火) 22:56:41.83ID:Xx2aI1jk0
初心者だから経験が浅いので分からん
2017/11/14(火) 22:58:32.66ID:ypDSy74La
あからさまに変な人は相手にしないほうがいいよ
俺も言ってる意味がわからない
355デフォルトの名無しさん (ワッチョイ df03-uZPj)
垢版 |
2017/11/14(火) 23:00:13.12ID:vkrHhpXR0
>>348
戻り値だったらいいの?例外となんか違うか?
2017/11/14(火) 23:02:10.19ID:D89+JmTA0
>>355
お前、なんの例外がくるのか全部把握してる前提で話してるだろ?
2017/11/14(火) 23:06:39.11ID:deF3FeCf0
把握できてる(かつ握っても問題ない)例外だけ握ればいいんじゃないの?
なんで全部握りつぶすの?
2017/11/14(火) 23:18:43.22ID:D89+JmTA0
>>357
どこで例外発生するかわかんないから
2017/11/14(火) 23:25:37.86ID:sSxxq2Sz0
>>358
何処で発生するか、しかも例外の内容も分からない例外を仕分けして何をしたいんだ?
360デフォルトの名無しさん (ワッチョイ df03-uZPj)
垢版 |
2017/11/14(火) 23:33:00.11ID:vkrHhpXR0
>>356
お前なんの戻り値がくるのか全部把握してる前提で話してるだろ?
2017/11/14(火) 23:43:11.80ID:D89+JmTA0
>>359
だから失敗でアプリ落としたくねーんだよ
アスペか
んで全ての例外に対応したいがメソッドの中身を読むも広大過ぎてなんの例外がくるのかわからない

ときたら握り潰すしかないよね
2017/11/14(火) 23:43:49.21ID:D89+JmTA0
>>360
それは成功以外は失敗じゃない?
2017/11/14(火) 23:48:21.45ID:ypDSy74La
>>361
それはダメなやり方だよ

例外をキャッチしきれなければアプリを落とすべきなんだよ
それが基本なんだよ

特殊な場合は別だけど普通はそう教わる
2017/11/14(火) 23:48:53.64ID:sSxxq2Sz0
>>361
だったら、例外をcatchして例外メッセージをMessageBox.Show()しとけば良いだけだろ。
365デフォルトの名無しさん (ワッチョイ df03-uZPj)
垢版 |
2017/11/14(火) 23:49:57.17ID:vkrHhpXR0
>>362
だったら例外も同じじゃない?
2017/11/14(火) 23:53:24.48ID:+V2acIIZ0
こんな深夜に要件定義されていない議論するとか正気か?
2017/11/14(火) 23:58:02.52ID:D89+JmTA0
>>365
だから落ちんなよって
2017/11/14(火) 23:58:11.24ID:sSxxq2Sz0
>>363
>例外をキャッチしきれなければアプリを落とすべきなんだよ

どんな例外もキャッチしなきゃダメだろ。
キャッチして「駄目だコリャ」の場合はログ吐いて落とすしかない。
369デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
垢版 |
2017/11/14(火) 23:58:46.20ID:A1uj0brl0
Windowsの場合、ハンドルされない例外で落としておけば、ユーザーには後日解決策が
提示される場合があると表示されて、パートナーには統計情報が連絡される。
2017/11/14(火) 23:59:42.34ID:j+l8jijkd
動いてそうだけど動いてないかもしれない、エラーが中で出てるけど見えないプログラムなんて、

ブレーキランプはつくけどホントにブレーキがかかるかわからない車みたい。
いっそ走らないほうがマシ。
2017/11/15(水) 00:01:02.73ID:udlId46Ca
>>367-368
どうせネタのつもりで言ってるんだろうけど面白くないから
2017/11/15(水) 00:02:05.46ID:iANpDJJe0
>>369
MS以外に例外情報を送信することができるのか?
373デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
垢版 |
2017/11/15(水) 00:03:28.48ID:2GqBFPwl0
>>372
統計情報だけもらえる。
2017/11/15(水) 00:03:40.40ID:QiSxe5F2a
>>368
キャッチして何になるんだよ?

アプリは予測してない状況になってるんだぞ
予測できてないから復旧もできないし
誤動作してシステム食いつぶすこともあるんだから生かしておく意味はありません

そういうことしてDBに特定のデータだけ一晩中書き続けた例を知ってる
375デフォルトの名無しさん (ワッチョイ df03-pAaq)
垢版 |
2017/11/15(水) 00:03:57.83ID:iCpU6Box0
>>367
むしろ例外の仕組みがない言語の方がプログラマーに制御できないとこで勝手に落ちるんじゃないの?
2017/11/15(水) 00:04:36.82ID:MZOj6Nbl0
>>369
ダイアログ出てる間はプロセス掴んだままになるから、
素直にプロセス落として自動的に再起動させたい場合には邪魔になるやつね。
2017/11/15(水) 00:04:47.32ID:iANpDJJe0
>>373
なにそれ?
2017/11/15(水) 00:05:46.61ID:De4EEM1x0
ロガークラスなんかだと
中で例外全部握り潰すけど
catch {}
2017/11/15(水) 00:06:23.35ID:iANpDJJe0
>>374
だから、ログ吐いて落とすって書いてあるだろ。
殆どの場合、例外を拾ったら落とすしかない。
2017/11/15(水) 00:10:28.88ID:pJdoypJN0
ダメだこいつら
話になんねー
あるべき論はいいからさっさとアプリ動かせよ

握りつぶして動くなら動くでいいだろ
メソッドの中身なんて3万行だか4万行だか読んでらんねんだよバカが
その全てでテキトーに例外発生させてんだから握りつぶしてナンボだろこんなの
2017/11/15(水) 00:11:54.55ID:De4EEM1x0
Office系は印刷中キャンセルボタン押しただけで
COMException投げてきたりするから
とりあえず握り潰すようにしている
382デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
垢版 |
2017/11/15(水) 00:12:29.08ID:2GqBFPwl0
DBはコミットしなければいいと思う。
2017/11/15(水) 00:20:37.66ID:iANpDJJe0
>>380
じゃ、メッソッドの呼び出しもと全部にcatch {}入れとけよ。
2017/11/15(水) 00:26:18.34ID:AeO6Jp1U0
例外で落としたくないプログラムってのはたしかに存在するけど
基本そんなプログラムをC#で書くのが間違ってると思うわ

例外処理のっていうときに、C#での(あるいは.NETでの)例外処理は、って言うようにしようぜ
つかまあこの話もう終わりで良いけど
385デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
垢版 |
2017/11/15(水) 00:26:49.27ID:2GqBFPwl0
ただまあ例外なんて滅多に出ないからね。
386デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
垢版 |
2017/11/15(水) 00:27:26.82ID:2GqBFPwl0
C++スレじゃないのか。
2017/11/15(水) 00:27:39.78ID:rNYxO5wL0
>>337
そのメソッドAが戻り値あり立った場合は?さらに外?それともヌル返す?
388デフォルトの名無しさん (ワッチョイ 5f8a-lB0v)
垢版 |
2017/11/15(水) 00:28:57.41ID:nkl9Qzh90
長々と無意味なレスバが続いてたけど、ひとつだけ皆が同意できそうなのは
例外がどういう用途で使われるべきかの一般的なコンセンサスに従う人は
ID:D89+JmTA0 = ID:pJdoypJN0 と一緒に仕事したくない、という点だけだな
389デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
垢版 |
2017/11/15(水) 00:30:13.38ID:2GqBFPwl0
異常は戻り値で知らせるなって言いたいんじゃないの。
まあそりゃそうだよねって言う。
2017/11/15(水) 00:57:36.26ID:ESiJAd3S0
ここc#スレで合ってるよね…
2017/11/15(水) 01:09:16.87ID:udlId46Ca
勘違いする人がいると見てられないので一応書いとくけど、
例外の目的の一つはフェイルセーフ、つまりプログラマの想定外のことが起こった時に
「安全側に倒す」 = 「プログラムを強制終了させる」ことなので、
「プログラマの想定外のことが起こってもプログラムの実行が止まらないようにしたい」
などという馬鹿なことを考えてはいけない。
2017/11/15(水) 01:35:57.65ID:pJdoypJN0
>>391
はぁ?
他の誰かのライブラリを使ったときに
使用者の想定内がライブラリ作成者の想定外のときなんて簡単に発生すんだろーがバーカ
テメーはちんちんでも弄ってろ
2017/11/15(水) 02:16:30.38ID:oUD9LeEe0
ここは間を取ってContractしよう
2017/11/15(水) 03:59:39.11ID:f4TQv9de0
>>331
誰もみてないだろうけど多分解決したっぽいので質問取り下げます
ほんとlinqって便利だな
2017/11/15(水) 06:34:16.49ID:iANpDJJe0
>>392
具体的には何のライブラリ?
2017/11/15(水) 08:15:52.85ID:M8NqkMX5d
>>395
キチガイに触んなすな
2017/11/15(水) 08:45:58.03ID:6LdVh8Top
>>394
LINQでどうやるの?
2017/11/15(水) 09:21:08.88ID:EAeU3mIh0
>>395
会社の
お前のレス
ガイジ過ぎるだろ
ちょっと考えてからレスしたら
2017/11/15(水) 09:39:52.81ID:tmuRT0930
ガイジコラボ
2017/11/15(水) 10:00:24.72ID:K3LG5GcrM
>>399
お前、単発だけど
連結するとガイジなんだろ?w
2017/11/15(水) 10:01:55.68ID:DCxsxqPWd
>>397
やりたいのは文字列じゃないけどこんな感じのイメージ
パフォーマンスはしらない

var list = new List<string>() { "○", "×", "×", "×" , "○", "△", "△", "○", "△" };
Func<string, bool> isFirst = (item) => item == "○";

int groupingId = 0;
var result = list.Select(item =>{
if (isFirst(item)) { groupingId++; }
return new { Id = groupingId, Value = item };
})
.GroupBy(pair => pair.Id, pair => pair.Value);

// { "○", "×", "×", "×"}{"○", "△", "△"}{"○", "△" }
List<List<string>> hoge = result.Select(group => group.ToList()).ToList();
402デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 11:14:21.87ID:LdCnvqY76
LINQと関数型プログラミングって何が違うの?
2017/11/15(水) 11:42:46.04ID:l4Bv56LcM
>>402
ガイジ乙
404デフォルトの名無しさん (ワッチョイ 5f19-7wKg)
垢版 |
2017/11/15(水) 11:51:23.71ID:CJEkfJ7L0
>>401
畳み込みですやってみた。

var list = new List<string>() { "○", "×", "×", "×", "○", "△", "△", "○", "△" };

var isFirst = new Func<string, bool>((item) => item == "○");

var result = list.Aggregate(new List<List<string>>(), (prevList, item) =>
{
if (isFirst(item))
prevList.Add(new List<string>() { item });
else
prevList.Last().Add(item);
return prevList;
});

// resultからhogeにクローン
var hoge = (List<List<string>>)result.Select(group => (List<string>)group.Select(item => item));
405デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 12:03:19.06ID:RrK4s1ZI6
こっちの方がいいか。

var list = new List<string>() { "○", "×", "×", "×", "○", "△", "△", "○", "△" };

var isFirst = new Func<string, bool>((item) => item == "○");

var hoge = list.Aggregate(new List<List<string>>(), (prevList, item) =>
{
if (isFirst(item)) { prevList.Add(new List<string>() };
prevList.Last().Add(item);
return prevList;
});
406デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 12:05:06.75ID:RrK4s1ZI6
if (isFirst(item)) { prevList.Add(new List<string>() };
括弧ミスった
2017/11/15(水) 12:05:11.35ID:Tar4qvIud
Func<T,bool> を受け取るSplit関数定義した方が後で楽じゃね?
408デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 12:07:15.90ID:RrK4s1ZI6
確かにその方がスッキリするな。
いずれにしろsplitの中身を定義しないといけないけど
2017/11/15(水) 12:29:09.51ID:DCxsxqPWd
>>405
Agreegate余り使ったことなかったけど便利だな
こっちの方が綺麗だ

if (isFirst(item) ||prevList.Count>0)
書いてなかったけど、リストの先頭が〇とは限らないのでこんな感じで
2017/11/15(水) 12:35:31.31ID:MLdh1wBXM
Aggregateは宣言的でないので関数型に慣れたらむしろ読み辛く感じるようになる
考え方が実質的に手続き型だから、手続き型に慣れてる人には馴染みやすいので濫用されてしまいやすい
411デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 12:43:50.52ID:LdCnvqY76
関数型の典型的な関数みたいにバッ、バッって感じじゃなくてズィーンて感じだからか。
>>401のやり方だと使ってる関数はバッバだけ感じかもしれないけど外部変数使ってるから内外に絡み合ってるのがあれだけどどうすればいいんだろう
2017/11/15(水) 12:46:35.76ID:h8srGYM+0
Select/Aggregateなんて変な書き方せず素直にmap/reduceでいいのにな
SQLっぽくというコンセプトで台無しになってる感じ
413デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 12:48:32.27ID:LdCnvqY76
ズィーン→ズインッ→ズィッ→バッ
こう見れば畳み込みも関数型に馴染む
414デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 12:49:52.25ID:LdCnvqY76
>>412
まあこの場合ではSQLを扱ってるわけじゃないしな
2017/11/15(水) 12:54:47.35ID:l4Bv56LcM
関数にした方が見やすいじゃん
無駄に不具合出して喜ぶ低能過ぎる
2017/11/15(水) 13:11:40.68ID:DCxsxqPWd
確かに目新しさにおおーってなったけど、これただのforeachでいいな
やっぱシンプルにループさせるのが最強か

var result = new List<List<string>>();

list.ForEach(item => {
if (isFirst(item) || list.Count <= 0){
result.Add(new List<string>());
}
result.Last().Add(item);
});
2017/11/15(水) 13:14:41.39ID:MLdh1wBXM
var sep = list.Select((x, i) => new {x, i})
.Where(xi => xi.x == '○')
.Select(xi => new[] {'○'}.Concat(
 list.Skip(xi.i + 1).TakeWhile(x => x != '○')));
こうかな
関数作った方がいいのは同意する
2017/11/15(水) 14:15:45.67ID:1p9gbgPTa
上のお題、結果がIEnumerable<IEnumerable<string>>でいいなら、

var list = new List<string>() { "○", "×", "×", "×", "○", "△", "△", "○", "△" };
var index = 0;
var hoge = list.GroupBy(x => x == "○" ? ++index : index);

ではだめ?
419デフォルトの名無しさん (ワッチョイ 5f96-7wKg)
垢版 |
2017/11/15(水) 17:26:29.53ID:7R79hyBA0
>>416
それ意味的にはaggregateと全く変わらない
初期値が外にあるか引数のところにあるかしか違いない
420デフォルトの名無しさん (ワッチョイ 5f96-7wKg)
垢版 |
2017/11/15(水) 17:30:36.24ID:7R79hyBA0
>>417
それaggregateより読みやすいと思うか?
421デフォルトの名無しさん (ワッチョイ 5f96-7wKg)
垢版 |
2017/11/15(水) 17:40:07.85ID:7R79hyBA0
>>418
その型じゃダメでしょ。
2017/11/15(水) 18:02:02.20ID:1p9gbgPTa
>>421
過去ログろくに読まずに>>418書いたけど、質問者もGrouBy使ってるじゃん>>401
423デフォルトの名無しさん (ワッチョイ 5ff9-7wKg)
垢版 |
2017/11/15(水) 18:04:09.97ID:uxhVFwQf0
>>422
変換しろよ
その分だけコード長くなるぞ
2017/11/15(水) 18:09:17.28ID:1p9gbgPTa
>>423
何に変換するの?
元々の質問には最終的に欲しい型の指定はない
単に列挙できれば良いならIEnumerable<IEnumerable<string>>として扱えれば十分
2017/11/15(水) 18:38:01.15ID:AeO6Jp1U0
いつも思うんだが、この手のやつをLINQでやりたがるやつって何が目的なんだろ
自分ですらすらと書けるならLINQでいいけど、そうじゃないなら勉強以上の意味があるとは思えん

個人的にはシンプルさを競うなら>>418がいいと思う
戻りの型が気に食わないなら
.Select(t => t.ToList<string>()).ToList<List<string>>();
あたり追加すればいいだろ
2017/11/15(水) 18:40:53.79ID:EAeU3mIh0
こんなのやっててきったねーコード書く癖がついたら嫌だなw
427デフォルトの名無しさん (ワッチョイ df03-uZPj)
垢版 |
2017/11/15(水) 18:46:37.59ID:iCpU6Box0
お前らが思ってる程きれいでもきたなくもないから安心しろ
2017/11/15(水) 18:49:57.02ID:rNYxO5wL0
おい!待望の独習C#新版がでるみたいだぞ!
429デフォルトの名無しさん (ワッチョイ 5fe6-7wKg)
垢版 |
2017/11/15(水) 18:56:00.52ID:SIgrthm30
>>425
変数や関数を定義するのにいちいち名前をつけるのが面倒だからよく使う
無名だらけ
430デフォルトの名無しさん (ワッチョイ 5fe6-7wKg)
垢版 |
2017/11/15(水) 18:56:47.00ID:SIgrthm30
関数を定義するときには場所にも悩むしな
2017/11/15(水) 19:00:28.04ID:DCxsxqPWd
>>418
Selectなくても大丈夫だったか
hogeのGetEnumeratorが呼ばれる度にindexが増えていくのが気になるけど

戻り値はIEnumerableでもIGroupingどっちでもいいけどkeyは隠すかも
もし必要になったら以下のメソッドを作って、foreachと速度比較してって採用するかどうかって感じかな
色々と参考になった

public static IEnumerable<IEnumerable<string> Split<T>(IEnumerable<T> source, Func<T, bool> predicate){
var index = 0;
return source.GroupBy(x => predicate(x) ? ++index : index);
}
432デフォルトの名無しさん (ワッチョイ 5f6e-7wKg)
垢版 |
2017/11/15(水) 19:05:07.59ID:JCFmpBxh0
俺嫌われすぎだろ
アスペルガー症候群だから仕方ないのか
433デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/15(水) 19:06:53.89ID:LdCnvqY76
スリップが****-7wKgのは全部ワシじゃ
2017/11/15(水) 19:46:43.95ID:h8srGYM+0
linqより何でもListにしないと心休まらない兄貴の方が重症かもな
2017/11/15(水) 19:57:17.06ID:rGQqr4VZr
>>434
ww
現場にもよくいる
2017/11/15(水) 20:39:25.83ID:ILed194Q0
>>428
ここにいる人らにはもう必要ない
437デフォルトの名無しさん (ワッチョイ ffe8-ueqH)
垢版 |
2017/11/15(水) 20:42:42.91ID:4QHQX7jw0
>>434
アカンか?
2017/11/15(水) 21:21:02.68ID:EAeU3mIh0
linqだからで許されてるクソコード延々貼り付けたガイジはさっさと死ねよ
439デフォルトの名無しさん (ワッチョイ 5f86-bJtK)
垢版 |
2017/11/15(水) 21:25:59.97ID:md1eodvT0
LINQが良いか悪いかは別にしてLINQを必要以上に毛嫌いする奴って頭悪いだけだろ。
2017/11/15(水) 21:34:02.77ID:EAeU3mIh0
>>439
今回のは普通に書いた方が綺麗だったよね?
2017/11/15(水) 21:34:15.53ID:O2CkROvj0
ここ数日の有り様は何なんだろう
C#養護学校の卒業式でもあったのかね
2017/11/15(水) 21:35:20.82ID:EAeU3mIh0
linq友の会スレ使えよガイジ
443デフォルトの名無しさん (ワッチョイ 5f16-bJtK)
垢版 |
2017/11/15(水) 21:36:55.30ID:4L7ZsFBR0
必要以上にってのが言いたかった。
実用性は別としてリスト操作系関数でスラスラ書ける奴にコンプでもあるのかって思っちゃう
2017/11/15(水) 21:39:23.16ID:EAeU3mIh0
>>443
え?
そんなの気にしたことないや
プログラムなんて組めるようになったらそこでスキルレベルマックスだろ
2017/11/15(水) 21:43:12.25ID:EAeU3mIh0
あとは
設計書記述スキルを上げるか
見積り書記述スキルを上げるか
議事録作成スキルを上げるか
した方がナンボか実りがあるよ
446デフォルトの名無しさん (ワッチョイ 5f16-bJtK)
垢版 |
2017/11/15(水) 21:44:53.19ID:4L7ZsFBR0
しかし自分の苦手な物を使える奴にはコンプを感じる
2017/11/15(水) 21:46:47.98ID:D6YDuXrJ0
>>440
レスいくつも書き込むくらいならそのコード提示したらいいのに
■ このスレッドは過去ログ倉庫に格納されています