我正在尝试创建一个包装并与第三方 C API 接口的 .NET API。因此,API 的语义如下:
有一个属性表示二进制文件中的字符串列表。具有零条目列表的此属性之间存在区别,在这种情况下,该属性将被写入具有空列表的文件;并且该列表被完全省略,在这种情况下,该属性将从文件中省略。
在我目前的设计中,我正在使用这样的东西:
public class InfoWrapper
{
// Use an IList<T> to avoid running afoul of FxCop
// rule CA1002: Do not expose generic lists.
public IList<string> ItemsContainer { get; set; }
}
当然,这可以解决问题,让我能够区分“未设置”和“空列表”情况,但真正的问题是它触发了另一个 FxCop 警告 CA2227: Collection properties should be read only。我需要能够允许用户将属性设置为一个null
值,如果他们在将其设置为null
. DeleteItemsContainer()
我可以使用一对方法(例如和)将属性设为只读CreateNewItemsContainer()
,但实际上,我需要以相同的方式处理其中的几个属性。为每个属性添加两个方法会使 API 相当混乱。这里有什么更好的方法?
注意我意识到我可以取消 FxCop 警告并完成它,而这些规则只是一组建议。但是,如果可能的话,我希望遵守这些准则。