web-dev-qa-db-ja.com

値Tupleがデフォルトかどうかを確認します

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)
21
nawfal

defaultを返すようにしたい場合は、使用できます

result.Equals(default)

Equalsの組み込みValueTupleメソッドが機能するはずです。

C#7.3の時点で、値タプルは==!=による比較も完全にサポートするようになりました。

result == defaultと同じように動作するはずです。

23
Gibbon

デフォルト値を値タプルと比較する方法はいくつかあります。

    [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に具体化する必要があります。

デバッガーの下にあるものは次のとおりです。

enter image description here

9
Kit

試行には2つの問題があります。

  1. タプルに定義された_==_演算子はありません(C#7.2)
  2. タプル型のデフォルト値を取得するには、型を適切に括弧で囲む必要があります:default((int, int))

C#7.3では、_==_演算子がタプルに追加されることに注意してください。その後、_Tuple == default_を実行できます( live example を参照)。

5
Julien Couvreur

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 を参照してください

2
phillhutt