gpt4 book ai didi

c# - 传递一个 byte[]

转载 作者:太空狗 更新时间:2023-10-29 21:55:25 24 4
gpt4 key购买 nike

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

public byte[] FileRawData
{
get { return internalDataRow.FileRawData; }
set { this.internalDataRow.FileRawData = value; }
}

此属性随后在我们的整个应用程序中使用(可能在不同的程序集中)。根据 FxCop 规则,属性不应公开数组。那么,这里更好(或最好)的方法是什么?在这种情况下其他人会怎么做?

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

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

最佳答案

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

byte[] retVal = MyInstance.FileRawData;
retVal[1] = 0x00;

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

关于c# - 传递一个 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7375551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com