System.ValueTupleがデフォルトであるかどうかを確認する方法は?大まかな例:
(string foo, string bar) MyMethod() => default;
// Later
var result = MyMethod();
if (result is default){ } // doesnt work
C#7.2のMyMethod
構文を使用して、default
にデフォルト値を返すことができます。デフォルトのケースバックを確認できませんか?これらは私が試したものです:
result is default
result == default
result is default(string, string)
result == default(string, string)
default
を返すようにしたい場合は、使用できます
result.Equals(default)
Equals
の組み込みValueTuple
メソッドが機能するはずです。
C#7.3の時点で、値タプルは==
と!=
による比較も完全にサポートするようになりました。
result == default
と同じように動作するはずです。
デフォルト値を値タプルと比較する方法はいくつかあります。
[TestMethod]
public void Default()
{
(string foo, string bar) MyMethod() => default;
(string, string) x = default;
var result = MyMethod();
// These from your answer are not compilable
// Assert.IsFalse(x == default);
// Assert.IsFalse(x == default(string string));
// Assert.IsFalse(x is default);
// Assert.IsFalse(x is default(string string));
Assert.IsFalse(Equals(x, default));
Assert.IsFalse(Equals(result, default));
Assert.IsTrue(Equals(x, default((string, string))));
Assert.IsTrue(Equals(result, default((string, string))));
Assert.IsTrue(result.Equals(default));
Assert.IsTrue(x.Equals(default));
Assert.IsTrue(result.Equals(default((string, string))));
x.Equals(default((string, string)))
}
比較で使用される前の単純なdefault
は、その「純粋な」null
からメンバーのデフォルト値を含む値Tupleに具体化する必要があります。
デバッガーの下にあるものは次のとおりです。
試行には2つの問題があります。
==
_演算子はありません(C#7.2)default((int, int))
C#7.3では、_==
_演算子がタプルに追加されることに注意してください。その後、_Tuple == default
_を実行できます( live example を参照)。
C#7.3の時点で、タプル型は==および!=をサポートするようになりました。したがって、コードは次のようになります。
(string foo, string bar) MyMethod() => default;
// Later
var result = MyMethod();
if (result == default){ } // Works!
https://docs.Microsoft.com/en-us/dotnet/csharp/tuples#equality-and-tuples を参照してください