ふらっと 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(火) 02:32:24.83ID:KYSlLmBD0
>>246
日本語のドキュメントなのに読めないとか
249デフォルトの名無しさん (ワッチョイ 5f75-7wKg)
垢版 |
2017/11/14(火) 02:33:31.14ID:Xx2aI1jk0
なんでスップ2つ+固定回線で自演してるの?
2017/11/14(火) 02:34:47.54ID:L0+XEUiLa
>>247
言っちゃわるいけど、君の読解力がおかしいことはよくわかった。

その一文のどこをどう呼んでもキャッチした例外をInnerExceptionに入れて
別の例外を投げてはいけない、などという意味には読めません
2017/11/14(火) 02:36:25.31ID:WLqSYvBrd
>>250
読解力がないのはお前。否定してるのはExceptionクラスのインスタンスをnewしていること。
2017/11/14(火) 02:38:38.93ID:L0+XEUiLa
しかし、

>自作のソース コードからは、意図的に System.Exception、System.SystemException、System.NullReferenceException、または System.IndexOutOfRangeException をスローしないでください。

これ、前者2つがダメな理由は分かるけど後者2つはかなり意味不明だね。
翻訳ミスを疑ったけど英語でもそうなってる。
これはさすがに盲従する奴はアホだと思う
2017/11/14(火) 02:40:17.14ID:WLqSYvBrd
>>252
本気で言ってる?同じ疑問を持つ人はいるみたいだから少しググれば出てくるけど
https://stackoverflow.com/questions/22453650/why-are-we-not-to-throw-these-exceptions
2017/11/14(火) 02:41:11.99ID:L0+XEUiLa
>>251
普通に読めば>>233に出てくるExceptionとは限定的にExceptionクラスだけを
指しているとは読めない
2017/11/14(火) 02:45:47.13ID:WLqSYvBrd
>>254
あんな質問してくる初心者に「新しくExceptionオブジェクト作って」と言えば、「new Exception()」するだろうよ
ところで、>>253を少しは読んだのかい?
2017/11/14(火) 02:46:50.86ID:L0+XEUiLa
>>253
なるほど、NullReferenceExceptionの方は一応回答者が理由出してるけど
もっと明示的な例外の方が良いから使うなというには弱いように感じるね。

IndexOutOfRangeException の方は使っちゃダメな理由出てないね
2017/11/14(火) 02:47:11.28ID:KYSlLmBD0
>>254
勉強になって良かったね
2017/11/14(火) 02:47:35.87ID:L0+XEUiLa
>>255
それ、じゃあ自分なら何て表現するか考えてから言ってる?
2017/11/14(火) 02:48:14.13ID:L0+XEUiLa
>>257
「よっしゃ、今日はこのぐらいにしといたるわ」 by 池乃めだか
2017/11/14(火) 02:48:46.66ID:WLqSYvBrd
>>256
出てるからちゃんと読みなさい
2017/11/14(火) 02:49:29.79ID:L0+XEUiLa
>>260
出てないって
出てるなら引用してみ
2017/11/14(火) 02:50:04.51ID:WLqSYvBrd
>>261
煽って探してもらおうとするクズ
2017/11/14(火) 02:50:53.16ID:KYSlLmBD0
>>256
ほんとドキュメント読めない人なのね
2017/11/14(火) 02:56:20.70ID:L0+XEUiLa
>>263
君、そういうくだらないレスしかできない自分が嫌にならないの?
絵に描いたような「精神勝利法」だけど、そんなので勝った気になれるって小学生かよ。
俺ならプライドがあるからやらないけど、きっと傷つくような自尊心なんて最初から持ってないんだね
2017/11/14(火) 02:59:16.44ID:KYSlLmBD0
>>264
初心者ならもっと謙虚になりなさい
266デフォルトの名無しさん (ワッチョイ 5f8a-KLCy)
垢版 |
2017/11/14(火) 05:35:40.63ID:e8+qL+KH0
>>264
久々にみた気持ちの良いブーメラン
親切に教えてもらっても意固地になる人って職場にも一人はいるよね
2017/11/14(火) 06:55:43.62ID:sSxxq2Sz0
例外処理が難しすぎるのか例外処理を分かってないヤツが多すぎる。
Go言語が例外処理を言語仕様からはずしたのも納得できるな。
2017/11/14(火) 06:57:50.52ID:sSxxq2Sz0
>>237
非同期とか使わないでも実装出来るものを非同期にするとか
ロックの仕組みも分かってないのにスレッド使うとか
スキルの無いヤツほど難しい事をやりたがるwww
2017/11/14(火) 07:11:13.47ID:R9xQaEyZM
プロパティだけのデータストア用インナークラスを作ってるんですけど、クラスの修飾子をprotectedにして中のプロパティをpudlicにしています
メンバの方がアクセス権が広い事に違和感を感じるのですが世間様ではある事なのでしょうか
2017/11/14(火) 07:41:12.60ID:kBR8KFzeM
>>269
クラスもパブリックにしよう!
271デフォルトの名無しさん (ワッチョイ 5f4b-7wKg)
垢版 |
2017/11/14(火) 08:09:47.71ID:sF+2jjEu0
>>267おまえなら>>220にどう対処する?
2017/11/14(火) 08:27:49.82ID:04qZtOw+0
>>269
クラスがprivateの場合はメンバの方を広くするしかないんだからそれ自体はおかしくない
クラスがinternalでメンバがpublicというのはよくある
でもprotectedな内部クラスというのはそもそもあまり一般的ではないと思う
クラスの外にその内部クラスを使うユーティリティを定義したくなったらどうする?
紛らわしくて不便なだけで特にメリットがない
2017/11/14(火) 08:29:03.55ID:04qZtOw+0
補足
(派生クラスを作ろうとした人が)クラスの外にその内部クラスを使うユーティリティを定義したくなったらどうする?
という意味な
2017/11/14(火) 08:49:01.70ID:bKDw6GK5M
>>271
おそらく、HttpClientを使ってるんだろうけど
async/awaitの例外処理には罠がありそうなので
グーグル先生にお伺いをして慎重に例外処理を使う。
275デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/14(火) 09:09:39.51ID:HdsegbLs6
>>274
同期だったとしてどうする?
2017/11/14(火) 09:10:12.07ID:ElF9INq6r
>>220
HaskellのEither辺りを自分で実装w
探せば出てくるが

今時例外はあまり使わんね
時と場合によるが
277デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/14(火) 09:11:01.60ID:HdsegbLs6
>>276
サーバーに接続出来なかったらどうする?
2017/11/14(火) 09:13:48.16ID:ElF9INq6r
>>277
接続出来ない旨のLeftを返す
279デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/14(火) 09:15:00.68ID:HdsegbLs6
>>278
レフトとか知らないけど例外でよくね?例外がダメ理由は?
2017/11/14(火) 09:22:41.57ID:bKDw6GK5M
>>275
敵艦に突っ込んで玉砕だな
281デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/14(火) 09:32:31.86ID:HdsegbLs6
>>280
呼び出し関数内で何かしらのデータを作ったとしてそれはどうやって呼び出し元に伝達する?
2017/11/14(火) 09:39:13.23ID:bKDw6GK5M
>>281
何のデータの場合?
2017/11/14(火) 09:40:53.91ID:/dr35bqC0
暇な奴だ
284デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/14(火) 09:41:26.10ID:HdsegbLs6
>>282
404のレスポンスボディとか
2017/11/14(火) 09:47:33.77ID:bKDw6GK5M
>>284
例外で帰ってくるやつか?
そらなら呼び出し元でcatchだね
286デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/14(火) 10:00:57.46ID:HdsegbLs6
例外処理は汚くなるからイベントハンドラとかみたいな呼び出し階層の最上位にだけに集約させたいってこと?
2017/11/14(火) 10:06:00.72ID:bKDw6GK5M
>>286
汚くさせないためにあるのが例外処理だろ?
例外を放置すりゃ呼び出し最上位まで飛んでいくが。
288デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
垢版 |
2017/11/14(火) 10:11:37.55ID:NRM6wS+d0
存在しないリソースを要求するだけで例外を引き起こせるなら。
289デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/14(火) 10:23:21.54ID:HdsegbLs6
>>267>>276が何を言いたいのかわからん
2017/11/14(火) 12:12:12.09ID:5gpUPtII0
>>233
Exception派生オブジェクト
って書いとけばそれで済んだ話だと思うんだが
よくもりあがってるな
2017/11/14(火) 12:48:00.23ID:qGKirkhkd
>>290
それもそうだし、あまりのドキュメントを読む能力の無さに吹いたわ
2017/11/14(火) 13:35:30.02ID:kMJcGUhsM
例外の内容を戻り値で返そうとしていた時点で察するべき
2017/11/14(火) 13:35:49.40ID:uXnSzNFD0
今月ずっとhResult == IntPtr.Zeroとかresult != 0とか書いてた俺から見れば
例外なんて天国じゃないですか
2017/11/14(火) 13:42:38.82ID:kMJcGUhsM
>>293
その天使を握り潰してリターンで返してエラーハンドリング地獄にしようとしていたのさ。
2017/11/14(火) 13:51:56.33ID:D89+JmTA0
でもファイルが開けないで例外は困る
他のも完全に例外とそうでないのと作った奴との波長が合わないと
仕分けが面倒臭い
いっそ握り潰すは結構わかる
なんかいい手はるのか?
2017/11/14(火) 13:58:20.49ID:QAeRXYyyM
開けないという結果を返したいなら戻り値で返せばいいじゃん
例外の詳細が欲しいとか言うなら例外のまま戻ればいいってなる
2017/11/14(火) 14:04:41.09ID:kMJcGUhsM
>>295
開けないファイルを処理できる場所で例外のキャッチをすれば良いだけだが。
2017/11/14(火) 14:06:57.33ID:D89+JmTA0
>>297
だから一生懸命例外を仕分けするって話だろ
2017/11/14(火) 14:08:55.93ID:kMJcGUhsM
>>298
仕分け?
2017/11/14(火) 14:15:19.28ID:D89+JmTA0
>>299
だから他の奴の作ったクラスの例外にする挙動で気にいらない例外を仕分けする必要があるじゃん
アスペ過ぎるだろお前
2017/11/14(火) 14:17:24.41ID:RygzRtlR0
MSの推奨するasync越しの例外処理はCancellationTokenSource使うやつだろうが可也面倒だわな
キャンセルの仕組みを入れるなら、次いでに仕込んでもいいと思うが
2017/11/14(火) 14:19:11.58ID:kMJcGUhsM
>>300
例外の大半は致命的なエラーだろ
メッセージ吐いて落とすだけ
仕分けも糞もないわ
2017/11/14(火) 14:21:12.02ID:D89+JmTA0
>>299
うんちっちException
うんこっこException
うんこっここっこException
ちんぽっぽException
ちんぽっぽちんぽException
ちんちんException
まんこっこException
まんこっこっこException

それぞれ挙動を変えたい
2017/11/14(火) 14:22:20.64ID:D89+JmTA0
>>302
なんでファイルオープンミスったぐらいで致命的なエラーなんだよ
別ファイル指定させろ殺すぞ
2017/11/14(火) 14:25:29.18ID:kMJcGUhsM
>>304
キャッチしてリカバリ処理しても良いんだよベイベ
2017/11/14(火) 14:30:28.64ID:kMJcGUhsM
>>303
まんこっこExceptionだけキャッチして
あとはゲロ吐きへ
2017/11/14(火) 14:35:59.67ID:qGKirkhkd
>>304
またキチガイかよ
2017/11/14(火) 15:02:33.86ID:RygzRtlR0
致命的エラーの大半はバグだから、しっかりロガーに記憶センといかんよな
2017/11/14(火) 15:26:53.10ID:3oyxXo9MM
仕分けです
2017/11/14(火) 15:59:25.26ID:D89+JmTA0
>>308
そんなの組んだやつ次第じゃん
テメーのディスプレイに写った顔がキモメンなので例外
2017/11/14(火) 16:03:35.67ID:D89+JmTA0
ところでCsvHelperのCurrentRecord消えてんじゃん
たかがCsvでマッピングなんかしねーよ
コイツ馬鹿じゃん
やっぱり他人の作ったもんなんかゴミだな
この程度は自分で作るべきだった
312デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/14(火) 16:05:44.77ID:HdsegbLs6
アスペ
2017/11/14(火) 16:33:33.76ID:qGKirkhkd
そいつ英語読めないアスペ
2017/11/14(火) 17:10:19.65ID:kBR8KFzeM
戻り値のあるメソッドでcatchにもreturn入れないとエラーになるんだけど、普通、例外拾った場合、returnにはnullとかいれるの?
2017/11/14(火) 17:16:49.43ID:3oyxXo9MM
>>314
エラーで戻り値をセット出来ない場合は、
メソッドの中でcatchしないで呼び出し元でcatchする。
2017/11/14(火) 17:20:01.42ID:kBR8KFzeM
>>315
なるほど、メソッドの外でcatchするんですね。それが定石なんでしょうか?
2017/11/14(火) 17:33:11.61ID:3oyxXo9MM
>>316
メソッドの中でcatchして例外に対する処理が出来れば、そこでcatchすれば良いし、出来なきゃ呼び出し元でcatchする。呼び出し元で処理出来なけりゃ更に上位の呼び出し元でcatchする。
基本は例外は例外なのでそんなことが起きないようにコーディングする。
2017/11/14(火) 17:45:16.91ID:vWcSiHz/0
WebにあるMSDNの説明を和文で見る人は、「.NET Framework(current version)」を「.NET Framework 4」に変更して、みたほうが良いかもね。
それでも変な和訳だけど。
2017/11/14(火) 18:04:00.27ID:gCxVQMlVa
>>314
それ、問題設定がおかしい(きつい言い方だけどそれは愚問)だから、
たぶん例外の意味が根本的に分かってないんだと思う。

まず「そもそも例外って何?」ってところからちゃんと理解した方がいいと思う。
理解をパスして定石だかお作法だかを覚えることで乗り切ろうとする態度は危険

それと
>戻り値のあるメソッドでcatchにもreturn入れないとエラーになる
間違ってる。
コンパイル通らないのは値を返さない実行パスが存在する場合だけ
2017/11/14(火) 18:31:17.73ID:rQHwrbmI0
>>319
例外処理を理解してないやつってホント多いよ。
c#何年もやってて理解してなとか普通に居るし。
2017/11/14(火) 18:47:46.83ID:gXgokZ6Md
>>320
>>319も基本的なことを理解してなかったみたいだけどね
2017/11/14(火) 18:59:20.88ID:ElF9INq6r
>>279
ダメでは無いが例外の欠点

上下のやり取りにもあるように例外は扱いが難しく暗黙知が多い
(個人的には難しいとは思わんが)
簡単に握り潰せる
その関数が例外を出すかどうかはパッと見には解らない
非同期の時どうなるか直感的ではない

今はビジネスロジックのエラーに例外はあんまり使わない
もちろんケースバイケース
2017/11/14(火) 19:23:50.29ID:pfWBpEcAM
>>270
インナークラスってそれを持ってるクラスで隠蔽したいからあるものじゃ無いんですか?

知っているだけで用法を知らない事を痛感しました
2017/11/14(火) 19:24:49.61ID:D89+JmTA0
ドキュメント書かない奴に限って
ちんぽっぽちんちんException
の亜種をたくさん作るんだw

ところで
CsvHelper
GetRecords<dynamic>()で動くだろ死ねよ
って温かいレスをもらったが
Csvの読み込み程度でこんな翻弄されてるなら
やっぱり自分で作った方が安泰かな?
NuGet最新取ると概ね動かないぜ
2017/11/14(火) 19:32:20.40ID:sSxxq2Sz0
>>322
Go言語が例外処理を無くしたのは、

・例外処理を正しく扱えないヤツが余りにも多すぎる
・例外処理は並行処理では扱い辛い

後者の方が無くした主な理由だろうけど
例外処理分かってないヤツ多すぎるwww
2017/11/14(火) 19:35:09.24ID:sSxxq2Sz0
>>324
ソースがあるのだし自分でソースくらい見ろよ
オープンソースでドキュメント期待する方が間違ってるぞwww
2017/11/14(火) 19:58:23.54ID:0snQAOLI0
キチガイのバザール
328デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/14(火) 20:04:06.14ID:QqwKiGyo6
>>322
どこが難しいと思うの?
2017/11/14(火) 20:39:11.83ID:ElF9INq6r
>>328
俺に聞くなボケw
個人的には難しいとは思わんが
とわざわざ書いたのにそれが目に入らぬか ??
2017/11/14(火) 20:59:27.95ID:HCb+ZNawa
Listのaddメソッドって例外飛ばさないんですか?
もう追加できないよ!みたいな感じで
2017/11/14(火) 21:01:39.87ID:ozKhZGN+0
{〇,✕,✕,〇,△,△,△,〇,△}みたいなリストを{〇,✕,✕,}{〇,△,△,△,}{〇,△}って感じに分けたいんだけどLinqで簡単に出来ないかな?
ループさせんのが面倒で
2017/11/14(火) 21:03:14.99ID:cajczz9H0
>>318
英文表示にして段落毎にグーグル先生に翻訳して貰うと割と読める文章になることが多い。
グーグル翻訳でもサイト翻訳は翻訳精度が悪い。
2017/11/14(火) 21:07:06.30ID:07a/swYLa
>>331
SkipとTake使えば?
334デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/14(火) 21:11:28.16ID:6kJ9cNLk6
>>329
どこがみんなにとって難しいと思うから322で難しいとか書いたの?
2017/11/14(火) 21:13:21.13ID:ElF9INq6r
>>334
これだけ意見相違があるから
336デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/14(火) 21:16:24.25ID:6kJ9cNLk6
よくわからんが難しくないだろ。
2017/11/14(火) 21:17:36.48ID:07a/swYLa
例外を変なところでキャッチしちゃう人が多い

メソッドAの中でメソッドBを呼んでまたメソッドCを呼んだとする

メソッドC中で例外が起こってもメソッドC内でキャッチしちゃって
メソッドCの戻り値をnullでリターンして
メソッドBで戻り値のnullチェックしてnullだったらまた戻り値をnullでリターンして
またメソッドAでチェックしてみたいな馬鹿な使い方をしてる

メソッドAでキャッチしろって思う
338デフォルトの名無しさん (ガックシ 064f-7wKg)
垢版 |
2017/11/14(火) 21:18:54.31ID:6kJ9cNLk6
>>337
それだけだよね。
なんも難しくない
2017/11/14(火) 21:22:31.53ID:ozKhZGN+0
>>333
んーそれ余計に面倒にならない?
2017/11/14(火) 21:23:42.17ID:07a/swYLa
例外を目の前でキャッチするくらいなら他の制御構文でヤレ
2017/11/14(火) 21:33:26.00ID:sSxxq2Sz0
>>337
ホントそれ。
至る所にtry/catchがある。
try/finallyは多用するがtry/cathなんて滅多に使う事はない。

例外処理は至る所に例外処理コードを書かないために存在する。
2017/11/14(火) 21:54:38.57ID:D89+JmTA0
>>341
だから何度も書いてやってんじゃん
仕分けが絶望的に面倒臭ぇから握り潰しちまうって

だってさよく考えろよ
ドキュメント化されてないメソッドが出す例外って全部でいくつかどうやって調査する?
2017/11/14(火) 22:03:00.14ID:5gpUPtII0
仕分けめんどくさいのは同意するけど、握りつぶすのはどうなんだ
仕分けした結果握りつぶして問題ないって判断したものならいいかもしれんが

極論として、全部握りつぶす or 全部スルーして上位にキャッチさせる
どっち選ぶ?
2017/11/14(火) 22:03:51.57ID:sSxxq2Sz0
>>342

例外処理を誤解している典型例です。
皆さん絶対に真似しないように。
2017/11/14(火) 22:08:15.89ID:sSxxq2Sz0
>>337
>例外を変なところでキャッチしちゃう人が多い

かと思えば、例外が必要なところでtry/catch { } で握りぶしちゃう人も多い
これも追加ね。

無駄なtry/cathと握りつぶし
例外が分かってないヤツの典型例
346デフォルトの名無しさん (ワッチョイ df03-uZPj)
垢版 |
2017/11/14(火) 22:09:59.38ID:vkrHhpXR0
例外の仕分けとは何なのか
2017/11/14(火) 22:11:36.04ID:FOR7JOrW0
分かったからママに教えてやれ
お前が可愛いなら誉めてくれるだろう
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。