サードパーティの 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: コレクション プロパティは読み取り専用である必要があることです。ユーザーがプロパティに値を設定できるようにする必要があり、null
設定後に気が変わった場合はリストに戻る可能性がありますnull
。2 つのメソッド (たとえば、DeleteItemsContainer()
とCreateNewItemsContainer()
) を使用して、プロパティを読み取り専用にすることもできますが、実際には、同じ方法で処理する必要があるこれらのプロパティがいくつかあります。プロパティごとに 2 つのメソッドを追加すると、API がかなり乱雑になります。ここでより良いアプローチは何でしょうか?
注: FxCop の警告を抑制して処理を終了することもできますが、これらのルールは一連の提案にすぎません。ただし、可能であれば、これらのガイドライン内にとどまりたいと考えています。