Beschränken, allgemein zu werden eine nullable-Typ

Ich bin auf der Suche zum Beispiel etwas wie:

Foo<string> stringFoo = new Foo<string>("The answer is");
Foo<int> intFoo = new Foo<int>(42);
//The Value of intFoo & stringFoo are strongly typed
stringFoo.Nullify();
intFoo.Nullify();
if (stringFoo == null && intFoo == null)
   MessageBox.Show("Both are null);

Diese Klasse Foo, ich kann auto-wrap-T in eine durch null-Werte zulässt:

public class Foo1<T>
   where T : struct
{
   private T? _value;

   public Foo(T? initValue)
   {
      _value = initValue;
   }

   public T? Value { get { return _value; } }

   public void Nullify { _value = null; }

}

Diese funktioniert bei den primitiven, aber nicht mit einer Schnur oder anderen Klassen.

Nächsten Aroma-Werke für Streicher, aber nicht primitive:

public class Foo2<T>
{
   private T _value;

   public Foo(T initValue)
   {
      _value = initValue;
   }

   public T Value { get { return _value; } }

   public void Nullify { _value = default(T); }

}

Könnte ich Nullable<int> für Foo2 und der code würde arbeiten wie diese:

Foo2<int?> intFoo = new Foo<int?>(42);

Aber das ist fehleranfällig, weil es nicht für Foo2. Wenn ich könnte einschränken, dass T-Typen unterstützen null-Zulässigkeit, dann wäre das in Ordnung.

So, nachdem alle, die, gibt es eine Möglichkeit zu beschränken, dass T ein nullable-Typ?

Zusätzliche Hinweise: .NET 4.0, VS2010. Und ich habe eine ähnliche Frage wie diese hier, aber ohne eine erfolgreiche Antwort.

InformationsquelleAutor der Frage tcarvin | 2013-02-15

Schreibe einen Kommentar