传递一个byte []

Dan*_*oft 6 c# collections fxcop

我们使用的第三方生成的代理将BLOB数据类型公开为byte [],然后我们通过代码生成公开此值,如下所示:

public byte[] FileRawData
{
    get { return internalDataRow.FileRawData; }
    set { this.internalDataRow.FileRawData = value; }
}
Run Code Online (Sandbox Code Playgroud)

然后,通过我们的应用程序(可能在不同的程序集中)使用此属性.根据FxCop规则,属性不应该暴露数组.那么,这里更好(或最好)的方法是什么?别人在这种情况下做了什么?

  1. 切换到这些类型的方法.
  2. 更改为集合(即ICollection<T>IList<T>实现)
  3. 关闭此FxCop规则.

选项3总是可行的,但如果我们应该以不同的方式做事,那么我宁愿这样做.

blo*_*art 2

这种情况下常见的问题是不变性。当 byte[] 返回时,调用者可以更改它,而无需通过设置器。考虑一下如果有人这样做会发生什么

byte[] retVal = MyInstance.FileRawData;
retVal[1] = 0x00;
Run Code Online (Sandbox Code Playgroud)

可能根本不是您想要的,因为 MyInstance 内部的值已更改,这可能会导致问题。因此,为了阻止这种情况,您可以克隆数组,但这可能会长时间运行,并且属性不应用于长时间运行的操作。解决这个问题的最佳方法是切换到集合和获取方法,除非数组总是很小。当然,当您开始将 GetFileRawData() 编写为方法名称时,FXCop 会提示您它应该是一个属性,您无法赢得grin在这种情况下,只需在代码中禁用它即可;对于这一种方法。