2

前提条件コード コントラクトとして、参照型が null になるのを防ぐためのラッパー クラスを作成しました。

public sealed class NotNullable<T> 
    where T : class
{
    private T t;

    public static implicit operator NotNullable<T>(T otherT)
    {
        otherT.CheckNull("Non-Nullable type");
        return new NotNullable<T> {t = otherT};
    }

    public static implicit operator T(NotNullable<T> other)
    {
        return other.t;
    }

}

これは問題なく動作しますが、Nullable を扱うときのように常にキャストが必要です。

public void Foo(NonNullable<Bar> bar)
{
    Console.WriteLine((Bar)bar);
}

NonNullable 型のパラメーターをキャストせずに T 型のように動作させることは可能でしょうか? 仕様番号のように:

public string Foo(Bar! bar)
4

1 に答える 1

1

プロパティを介してオブジェクト自体にアクセスできるようにすることでキャストを回避できますがValue、それがキャストよりも優れているかどうかは議論の余地があります。

Console.WriteLine(bar.Value);

XML またはコード内の注釈を介して、この値が null ではないことを ReSharper などのツールに伝えるために使用できるトリックもあります。

[NotNull]
public T Value { get { return t; } }
于 2011-10-09T16:10:54.317 に答える