を上書きしますは、どのように私たちが知っている `is`オペレータ
int? number = 10;
Console.WriteLine(number is int); // true
しかし:
私はそれを行うことができますどのように私はtext is string
リターン真たい
NotNull<string> text = "10"; // NotNull<> is my struct
Console.WriteLine(text is string); // false
、?
--------------------------------編集ここ
は私NOTNULLです:
public class NotNull<T> where T : class
{
public T Value { get; }
private NotNull(T value)
{
this.Value = value;
}
public static implicit operator T(NotNull<T> source)
{
return source.Value;
}
public static implicit explicit NotNull<T>(T value)
{
if (value == null) throw new ArgumentNullException(nameof(value));
return new NotNull<T>(value);
}
}
クラスは以下のように宣言された場合:
public class A
{
public string B { get; set; }
}
01:
public class A
{
public NotNull<string> B { get; set; }
}
は、私はただのシリアライザは、同じことをシリアライズとデシリアライズすることを願って
--------------------------------編集2
これは不可能な質問です。
- がクラスの場合、
default(NotNull<>)
はnullです。何もしません。 NotNull<>
が構造体の場合、default(NotNull<>).Value
はnullです。
申し訳ありません。 MSDNで
'is'はオーバーライド可能な演算子ではありません。あなたは 'NOTNULL'は値型である場合は、あなたが防ぐことができないということを知っ 'デフォルトです、 –
PetSerAl
は答えにこれを作る@PetSerAl(他にはありません)ので、あなたはこれらの演算子が動作するようになった場合の質問はしても – Carsten
を閉じることができます(NotNull) 'が使用されていませんか?私はそれが主な理由のC#は内蔵のNotNull' 'のようなものを持っていないということ読んで思い出してください。あなたがそう重度の言語はかなり使えなくなること、それの有効な使用を制限しない限り、それだけで動作しないことができません。 –
hvd