編寫此方法的最可讀性(和慣用)是什麼?檢查字節是否爲0x00
private bool BytesAreValid(byte[] bytes) {
var t = (bytes[0] | bytes[1] | bytes[2]);
return t != 0;
}
我需要在此進行測試的前三個字節,它不是與00 00 00
開始文件的功能。
沒有做太多的字節操作。上面的代碼對我來說似乎不正確,因爲t
被推斷爲Int32
。
編寫此方法的最可讀性(和慣用)是什麼?檢查字節是否爲0x00
private bool BytesAreValid(byte[] bytes) {
var t = (bytes[0] | bytes[1] | bytes[2]);
return t != 0;
}
我需要在此進行測試的前三個字節,它不是與00 00 00
開始文件的功能。
沒有做太多的字節操作。上面的代碼對我來說似乎不正確,因爲t
被推斷爲Int32
。
t
是類型推斷爲一個Int32
燁,因爲操作者|
(像大多數運營商)爲byte
沒有定義 - 字節被晉升爲int
值。 (有關詳細信息,請參閱C#4規範的第7.11.1節。)
但是,考慮到您只想將其與0進行比較,無論如何這很好。
個人而言,我只希望把它寫成:
return bytes[0] != 0 && bytes[1] != 0 && bytes[2] != 0;
甚至:
return (bytes[0] != 0) && (bytes[1] != 0) && (bytes[2] != 0);
這兩個似乎更清楚我。
知道有一個更好的方法來清理。謝謝。 +1並回答。 – BuddyJoe 2013-02-28 19:37:24
爲了預測變量數組的長度,避免空引用異常:
private bool BytesAreValid(byte[] bytes)
{
if (bytes == null) return false;
return !Array.Exists(bytes, x => x == 0);
}
非LINQ的版本:
private bool BytesAreValid(byte[] bytes)
{
if (bytes == null) return false;
for (int i = 0; i < bytes.Length; i++)
{
if (bytes[i] == 0) return false;
}
return true;
}
因此,如果存在任何'0',那麼返回'false'? – 2013-02-28 20:01:21
是的,如果數組包含一個等於零的值或數組爲null,則返回false(無效)。 – Tim 2013-02-28 20:11:49
你不介意在後一個取代「最佳途徑」 「最易讀」/「最緊湊的代碼」/「最快的代碼」或任何其他明確定義的「更好」的標準? (考慮在你閱讀時從標題中刪除標籤)。 – 2013-02-28 19:44:52
+1 - 好主意 – BuddyJoe 2013-02-28 19:47:14