78235


C#で呼び出し先で必ず例外処理`try-
catch`をしてほしいという関数があるのですが、`Swift`だと`throws`で出来ると思うのですが、C#でもこれは可能ですか？


CC BY-SA 4.0
2021-07-16T06:47:33.403
78227
2021-07-16T22:38:42.213
2021-07-16T10:08:41.007
4236
40856
question
c#
C#でSwiftのthrowsに相当する書き方はありますか？


C# では発生した例外に対しtry-
catchしなければプログラムが停止します。プログラムを継続したいかは呼び出し側の判断であり、ライブラリ提供側で制御するべきではない、というのがC#の設計思想です。

なお、何らかのエラーであってもそれが期待されているものであれば例外を投げるべきではありません。例えば

  * [`Int32.Parse()`](https://docs.microsoft.com/ja-jp/dotnet/api/system.int32.parse?view=net-5.0) パースできてしかるべきであり、できなかった場合は例外を投げる
  * [`Int32.TryParse()`](https://docs.microsoft.com/ja-jp/dotnet/api/system.int32.tryparse?view=net-5.0) パースできない可能性があり、できなかった場合は戻り値で表す

のように標準クラスライブラリは設計されています。

* * *

> C#でSwiftのthrowsに相当する構文はありますか？

上記回答から読み取れなかったのであればすみません。C#言語にはそのような構文は存在しません。C#言語の設計において採用されなかった＝不要と判断された理由が上記です。


CC BY-SA 4.0
2021-07-16T10:08:25.203
78230
2021-07-16T22:38:42.213
2021-07-16T22:38:42.213
4236
4236
78227
answer


チェック済み例外(checked exception)という概念らしいですが、C#ではサポートしていないようです。  
[例外処理 - C SharpとJavaの比較 -
Wikipedia](https://ja.wikipedia.org/wiki/C_Sharp%E3%81%A8Java%E3%81%AE%E6%AF%94%E8%BC%83#%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86)

> Javaは非チェック例外 (unchecked exception) に加えてチェック済み例外 (checked exception)
> をサポートする。C#では非チェック例外のみである。チェック済み例外は、プログラマがメソッドから発生し得るものを全て宣言し、捕捉する必要がある。  
>
> 全てのエラーが処理されることを保証できるため、チェック済み例外は非常に便利だとする者もいる。一方、C#の設計者であるアンダース・ヘルスバーグのように、Javaのチェック済み例外はある程度実験的な仕様であり、小さなプログラムでの例を除いては実装する価値を見出せなかった、とする者もいる。

言語設計者(グループ？)の考え方の違いでしょう。  
C#では意識してそういうものをサポートしておらず、SwiftとJavaはサポートしているようですね。

Swift  
[Swiftのエラー処理についてざっくりとまとめてみた](https://dev.classmethod.jp/articles/about-error-
handling/)  
[【Swift】エラー処理 throws / throw / try / do / catch
について学んだ](https://qiita.com/tkmd35/items/99ab3d0eb54f2d229fa3)

Java & C#  
[例外の再考](https://blog.j5ik2o.me/entry/20091017/1255726919)  
[チェック例外がJavaにあってC#にない理由](https://blog.j5ik2o.me/entry/20091017/1255799827)  
[Java使いがC#を勉強する その⑧
例外処理](https://shironeko.hateblo.jp/entry/2017/03/04/204353)

C#  
[The Trouble with Checked Exceptions A Conversation with Anders Hejlsberg,
Part II](https://www.artima.com/articles/the-trouble-with-checked-exceptions)  
上記の勝手日本語化[The Trouble with Checked
Exceptions](https://kmaebashi.hatenablog.com/entry/20100101/p1)  
[Checked Exceptions are Evil](https://phauer.com/2015/checked-exceptions-are-
evil/)  
[C# のキーワード](https://docs.microsoft.com/ja-jp/dotnet/csharp/language-
reference/keywords/)

* * *

「C#でSwiftのthrowsに相当する構文はありますか？」について  
→無いと考えられます。

「C#だと、この関数はry-catchすべきなのかな？というのがわかりずらいのですが、それに対しての対処法はないのでしょうか？ 」について  
→ドキュメントを充実させて、その中に記述しておく、使う時はドキュメントを良く読む、ということでしょうね。  
→下記記事の回答に、XMLドキュメントを作成して記述しておくとIDEが補助してくれるかも？というのがあるようです。  
[回答の１つ](https://stackoverflow.com/a/17810407/9014308) /
[回答のもう１つ](https://stackoverflow.com/a/44169595/9014308)

英語版StackOverflowに質問と同類の記事がありました。  
[How to use Java-style throws keyword in
C#?](https://stackoverflow.com/q/3465465/9014308)


CC BY-SA 4.0
2021-07-16T15:09:05.650
78235
2021-07-16T15:09:05.650
26370
78227
answer