差分を作ることができますeが3例であった。
condition = null
のタイプがif
で有効な場所は1つです。これはCスタイルの言語ではnull
がif
(false
と評価されています)(これは大部分ですがC#では使用できません)で可能です。
C#でこの効果を持つ型を作成することが可能である:
public class Test
{
public static bool operator true(Test x)
{
return true;
}
public static bool operator false(Test x)
{
return false;
}
}
void Main()
{
Test test = new test();
if (test = null)
{
Console.WriteLine("!");
}
}
多くの時間は、それがより多くの価値を持っていた、特に(.NET 2.0導入ジェネリックいるので、これらの演算子をオーバーロードすることは意味を成していることはありません例えばbool?
のようにtrue
、false
またはnull
を示す値を有効にしたSqlBoolean
のようなタイプの場合は、
だから、このケースはC#ではかなり限界です。
void Main()
{
Test test = new Test();
if (test = null)
{
Console.WriteLine("!");
}
}
public class Test
{
public static implicit operator bool(Test x)
{
return true;
}
}
暗黙の演算子は、いくつかの理由のために回避する価値があるが、これはわずかです:順番にtrue
とfalse
演算子を実装することをbool
または型への暗黙の変換があるかどう
もう一つは、似ています最初の例よりも可能性が高いですが、まだ一般的ではありません。
さらに別の==
が非対称的にオーバーロードされている場合は次のとおりです。
public class Test
{
public static bool operator == (Test x, Test y)
{
return ReferenceEquals(x, null);
}
public static bool operator !=(Test x, Test y)
{
return !(x == y);
}
}
void Main()
{
Test test = new Test();
if (test == null)
{
Console.WriteLine("This won't print.");
}
if (null == test)
{
Console.WriteLine("This will print.");
}
}
しかし、非対称==
は常にバグがあるため、これはどんな効果があるとオペレータのバグに依存します。これはおそらく最初のケースよりも若干頻繁に起こりますが、そうしたときには修正する必要があります。
は、C#で効果を有することができるので、ケースはまれであり、ほとんどが、彼らはいけない何かをした誰かに基づきます。
このように、主にスタイルの問題です。 null
を最初に置く人々は、それがより多くの違いをもたらす言語からそれを取り上げる傾向があります。
コンパイラがそれに関する警告を生成する前に、それは古いCバージョンの関連するハックでした。 C#では問題ではありませんが、Cとは違って* bool *型ですので、書くときに叫ぶでしょう。(obj = null){} –