。ここではネット4.5.2 ...注文(条件、interpolatedStringMessage)
私は中!ContainsKey()
チェックしていました値を含む補間文字列でDebug.Assert()
は、見つかった場合、その
var dict = new Dictionary<string, string>();
string invalidKey = "invalidKey";
try
{
Debug.Assert((!dict.ContainsKey(invalidKey)), $"{nameof(dict)} contains the key {dict[invalidKey]}!");
}
catch (KeyNotFoundException)
{
Console.WriteLine("AssertionString was interpolated before the check was performed!");
}
(唯一の私の最初のバージョンでtry-catchブロックなし)
ように私はそこcatch
に実行されないと予想ただろうeの場合も同様である。 g。 .NETFiddle内のコードをチェックする(https://dotnetfiddle.net/RyQooWを参照)、ただし、Visual Studioで、ネット4.5.2の下でコードを実行している、私は次を得る:
interpolated string evaluated before assertion condition
をそれは間違いなく、文字列の補間(とではありません問題はContainsKey
)、メッセージから補間を取り除くと、例外がスローされないためです。
評価の順序は保証されていませんか?アサーションが真実なら、文字列は補間されないと思った。
または.NETランタイムのこのバージョンでは、この単なるエラー(多分、最適化、それらが静的か何かにするために、早期アサーション文字列を補間する?)
任意の入力をありがとう、と歓声です!
お使いの.NETバージョンは? v4.6.1では例外がありません。 – dymanoid
@dymanoid 4.6.1同様、Windows 8.1システムでVS 2015 Update 3 –