1. ホーム
  2. c#

[解決済み] C#のfalse演算子は何に使うの?

2022-12-01 23:26:35

質問

C#には、2つの奇妙な演算子があります。

もし私がこのことを正しく理解していれば、これらの演算子は、ブール式の代わりに使用したい型や、ブールへの暗黙の変換を提供したくない型で使用することができるはずです。

次のようなクラスがあるとします。

    public class MyType
    {
        public readonly int Value;

        public MyType(int value)
        {
            Value = value;
        }

        public static bool operator true (MyType mt)
        {
            return  mt.Value > 0;
        }

        public static bool operator false (MyType mt)
        {
            return  mt.Value < 0;
        }

    }

ということで、以下のようなコードを書くことができます。

    MyType mTrue = new MyType(100);
    MyType mFalse = new MyType(-100);
    MyType mDontKnow = new MyType(0);

    if (mTrue)
    {
         // Do something.
    }

    while (mFalse)
    {
        // Do something else.
    }

    do
    {
        // Another code comes here.
    } while (mDontKnow)

しかし、上記のすべての例では、true演算子のみが実行されます。では、C#のfalse演算子は何のためにあるのでしょうか?

注:もっと多くの例があります はこちら , ここ そして はこちら .

どのように解決するのですか?

を上書きするために使用します。 &&|| 演算子を使用します。

&&|| 演算子をオーバーライドすることはできませんが、もし | , & , truefalse を正しい方法で呼び出すと、コンパイラは |& と書くと ||&& .

例えば、次のコードを見てください ( http://ayende.com/blog/1574/nhibernate-criteria-api-operator-overloading - で、このトリックを知りました。 アーカイブ版 by @BiggsTRC)。

public static AbstractCriterion operator &(AbstractCriterion lhs, AbstractCriterion rhs)
{
       return new AndExpression(lhs, rhs);
}

public static AbstractCriterion operator |(AbstractCriterion lhs, AbstractCriterion rhs)
{
       return new OrExpression(lhs, rhs);
}

public static bool operator false(AbstractCriterion criteria)
{
       return false;
}
public static bool operator true(AbstractCriterion criteria)
{
       return false;
}

これは明らかに副次的な効果で、意図した使い方ではありませんが、便利です。