if (DateTime.Now.ToString("MMdd") == "0101") { Console.WriteLine("Happy New Year"); } else { Console.WriteLine($"It\'s still {DateTime.Now.Year}..."); }
try {
(DateTime.Now.ToString("YYYYMMdd001").ToInt32 } catch(Exception e) {
Console.WriteLine("Happy New Year to Everyone and especially Microsoft as well as Honda devs"); } finally {
Console.WriteLine($"It\ presently is year {DateTime.Now.Year}."); }
正しい例 (スコア:0)
if (DateTime.Now.ToString("MMdd") == "0101")
{
Console.WriteLine("Happy New Year");
}
else
{
Console.WriteLine($"It\'s still {DateTime.Now.Year}...");
}
#異論は認める
Re: (スコア:1)
try
{
(DateTime.Now.ToString("YYYYMMdd001").ToInt32
}
catch(Exception e)
{
Console.WriteLine("Happy New Year to Everyone and especially Microsoft as well as Honda devs");
}
finally
{
Console.WriteLine($"It\ presently is year {DateTime.Now.Year}.");
}
Re: (スコア:0)
Exceptionでキャッツしちゃうと新年以外の要因でもそこに分岐しちゃう可能性が……
Re: (スコア:0)
発生しうる例外が明示されたメソッドしか呼んでなくて、
無関係な例外が発生しない事を確認済みなら許容範囲では。
Re:正しい例 (スコア:0)
どうやって確認するのよ。自分のとこだけで走ってるわけじゃないんだよ?
Re: (スコア:0)
例えばDateTime.ToStringならFormatExceptionとArgumentOutOfRangeExceptionが発生というようなことがMSDNに書かれてる。そういうのを確認すればいい。それ以外のが発生しうるなんて特殊な状況を考えるのは無駄だよ。
https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.tostring?v... [microsoft.com]
#こういう例外の使い方を肯定してるわけではない
Re: (スコア:0)
Win32 APIだとMSDNに書かれていないエラーコードが返ってきたり、Windowsのバージョンが上がると追加されたりというのはごく日常的でとうてい「特殊な状況を考えるのは無駄」なんて切り捨てられないんだけど、C#はそういうことないの?
というか返される可能性のある例外すべてをあらかじめ想定するというのはまさにJavaの検査例外が失敗したパターンなんだけど。
Re: (スコア:0)
https://docs.microsoft.com/ja-jp/dotnet/api/system.string.system-iconv... [microsoft.com]
C#知らんけど、ToInt32ってこれで良いんだよね?
例外が発生するとは書いてないから、結局ダメじゃん。
Re: (スコア:0)
勿論ありえます。
実際、MSDNに書かれていない例外だって投げられることはあります。
特定の例外だけで処理したいならそう書かないといけない。
# そう書かないのは悪いコードという以前に、そもそも例外で処理する内容じゃないだろとか、突っ込みどころはそこじゃない気がしますけどね。
Re: (スコア:0)
こっちによると [microsoft.com]例外発生する。
MSDNは日本語ページは信用するなとか色々パターンあって読むのに慣れがいるw
Visual Studio上のツールチップでも例外の有無は表示されることになってるんだけど、そこに表示されないものも多いし。困ったものだ。