我不知道爲什麼代碼分析(在VS 2012)發出返回一個數組的「CA1819:屬性不應返回數組」,爲下面的代碼:替代從一個屬性的getter
private byte[] BackingFieldData;
public byte[] Data
{
get { return this.BackingFieldData; }
set { this.BackingFieldData = value; }
}
的說明警告狀態屬性返回的數組不受寫保護,即使該屬性是隻讀的。爲了防止數組防篡改,該屬性必須返回數組的副本。
我想要的是返回數組。用戶應該能夠修改數組,但不應該調整它的大小。數組的大小經常被用戶訪問。用戶必須能夠通過索引訪問元素。因此數組類型似乎完全適合。
候補委員,我認爲是IEnumerable<byte>
,IList<byte>
(索引使用Skip
和Take
等非常完成)(側重於添加和刪除元素 - 我不希望出現這種情況),並ReadOnlyCollection<byte>
(我討厭類公開方法總是扔NotSupportedException
s,遠離良好的編碼風格恕我直言)。我還想過在數組周圍創建一個包裝類的自定義接口 - 但是,這有什麼意義呢(除了我可以在不壓制它的情況下襬脫這個警告)。
因此,沒有人知道一個良好的類型返回數組類型或一個很好的理由不要在這種情況下返回數組呢?我到目前爲止沒有提到什麼影響?
+1對於'私有化':D(因爲如果不允許他們改變長度,這是一個好點)。 – Rawling
+1 public setter是一個錯誤,我總是看到任何集合類型。 –
對不起,5行代碼已經是bug了;-)。在我的實施中根本沒有二傳手。只有在演示代碼中;我想看看是否也有警告,如果有setter可用... – Korexio