11

ここで得たものよりも、コンストラクターが常に少なくとも 1 つの値で呼び出されるようにするよりエレガントな方法はありますか? 値が指定されていない場合はコンパイラ エラーが発生するので、この方法で行いました。

public class MyClass
{
    private readonly List<string> _things = new List<string>();
    public string[] Things { get { return _things.ToArray(); } }

    public MyClass(string thing, params string[] things)
    {
        _things.Add(thing);
        _things.AddRange(things);
    }
}

編集

コメントに基づいて、コードをこれに変更しました...

public class Hypermedia : Attribute
{
    private readonly Rel[] _relations;
    public IEnumerable<Rel> Relations { get { return _relations; } }

    public Hypermedia(Rel relation, params Rel[] relations)
    {
        var list = new List<Rel> {relation};
        list.AddRange(relations);
        _relations = list.ToArray();
    }
}

私がやろうとしていたことを隠すために、以前にコードを編集したことをお詫びします。コード エディターから直接貼り付ける方が簡単です。

4

2 に答える 2

14

Code Contractsはどうですか?

public MyClass(params string[] things)
{
    Contract.Requires(things != null && things.Any());
    _things.AddRange(things);
}

コード コントラクトには、コードをマークするためのクラス、コンパイル時の分析のための静的アナライザー、およびランタイム アナライザーが含まれます。

少なくとも、静的アナライザーから警告が表示されます。また、パフォーマンスへの影響を避けるために、リリース モードでランタイム分析をオフにすることもできます。

于 2013-03-27T10:53:29.443 に答える
-3

RequiredAttribute (.NET 3.5 以降で利用可能) を探していると思います。

詳細については、 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute.aspxを参照してください。

于 2013-03-27T10:48:09.480 に答える