3

知らない:

  1. これが機能する場合。
  2. それが良い考えなら。
  3. それについてもっと知るためにそれが何と呼ばれるか。

しかし、その意図はかなり明白だと思います。

public static class DebugLogic
{
    public static bool ThrowIfNull = false;

    public static T OrNew<T>(this T obj) where T : class
    {
        if (obj != null) return obj;
        else if (ThrowIfNull) throw new ArgumentNullException(//to do...);
        else return Activator.CreateInstance<T>();

    }
}

使用目的: var customer = order.Sale.OrNew().Customer.OrNew().Name

私は何をやっている?これは非常識ですか、それとも役に立ちますか?役に立ったようです。

4

2 に答える 2

6

OrNewメソッドを持つという考えは素晴らしいと思います。特に流暢なインターフェースを作ろうとしているなら。しかし、私はそれについて3つのことを変更します

  1. 動作を制御する隠しフラグを設定しないでください(ThrowIfNull)。これにより、誰かがOrNew通話を読んで、それが何をするのかを理解することができなくなります。
  2. 安全性の低い呼び出しnewを優先して制約を使用するActivator.CreateInstance<T>()
  3. 私はそれを以外の何かと呼ぶでしょうDebugLogic。通常(常にではありませんが)拡張メソッドコンテナはで終わりExtensionsます。

例えば

public static class LogicExtensions {
  public static T OrNew<T>(this T obj) where T : class, new() {
    if (obj != null) {
      return obj;
    }
    return new T();
  }
}
于 2012-02-03T17:14:06.757 に答える
0

この操作の名前は明らかに次のとおりです。DefaultIfNull

于 2012-02-03T19:38:19.797 に答える