naw*_*fal 23 c# valuetuple c#-7.2
如何检查System.ValueTuple是否为默认值?粗略的例子:
(string foo, string bar) MyMethod() => default;
// Later
var result = MyMethod();
if (result is default){ } // doesnt work
Run Code Online (Sandbox Code Playgroud)
我可以MyMethod
使用default
C#7.2的语法返回默认值.我无法检查默认情况?这些是我试过的:
result is default
result == default
result is default(string, string)
result == default(string, string)
Run Code Online (Sandbox Code Playgroud)
Gib*_*bon 24
如果你真的想让它回来default
,你可以使用
result.Equals(default)
Run Code Online (Sandbox Code Playgroud)
Equals
一个ValueTuple
应该工作的内置方法.
从C#7.3开始,值元组现在也支持通过==
和!=
完全比较,这意味着您现在也可以这样做
result == default
它应该工作相同.
Kit*_*Kit 10
有几种方法可以将默认值与值元组进行比较:
[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)))
}
Run Code Online (Sandbox Code Playgroud)
default
在比较中使用之前的简单必须从其"纯" null
到具有成员默认值的值元组.
这是调试器下的内容:
从 C# 7.3 开始,元组类型现在支持 == 和 !=。所以你的代码可能是这样的:
(string foo, string bar) MyMethod() => default;
// Later
var result = MyMethod();
if (result == default){ } // Works!
Run Code Online (Sandbox Code Playgroud)
请参阅https://docs.microsoft.com/en-us/dotnet/csharp/tuples#equality-and-tuples