我有這樣的代碼:ReSharper的不容找到可達代碼
Assert.IsTrue(datasetMetadata1 != null && datasetMetadata1.Length == 5);
Assert.IsTrue(datasetMetadata2 != null && datasetMetadata2 .Length == 11);
if ((datasetMetadata1 == null || datasetMetadata1.Length != 5) ||
(datasetMetadata2 == null || datasetMetadata2 .Length != 11)
{
/* do something */
}
其中ReSharper的簡化通過除去冗餘的(因爲永諾true
)表達== null
和通過反轉if
語句來以類似於:
if ((datasetMetadataPunktort.Length == 5) && (datasetMetadataFlurstueck.Length == 11))
return
但是對我來說,這個檢查似乎甚至是沒有意義的,並且可以很容易地忽略,因爲條件是真的。所以我想知道爲什麼ReSharper檢測到針對null
的過時檢查,但對其他人不適用。
我是否錯過檢查失敗的情況?
Resharper應該如何知道長度在運行時會有什麼值? – Alex
@ j0ey_wh嗯,公平點。它不知道房產是不可變的,那就是你的意思,不是嗎? – HimBromBeere
也許如果你引入一個長度變量它會注意到嗎? – Euphoric