[解決済み] 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演算子は何のためにあるのでしょうか?
注:もっと多くの例があります はこちら , ここ そして はこちら .
どのように解決するのですか?
を上書きするために使用します。
&&
と
||
演算子を使用します。
は
&&
と
||
演算子をオーバーライドすることはできませんが、もし
|
,
&
,
true
と
false
を正しい方法で呼び出すと、コンパイラは
|
と
&
と書くと
||
と
&&
.
例えば、次のコードを見てください ( 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;
}
これは明らかに副次的な効果で、意図した使い方ではありませんが、便利です。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] NULL-COALESCING 演算子のカスタム暗黙変換の不思議な挙動
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#で四捨五入する方法
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015