【发布时间】:2019-05-12 20:22:06
【问题描述】:
我正在尝试检查 object 变量是否为 (int, int),如果是,我将使用转换后的变量,因此我尝试了以下代码:
//this one gives the error
public void MyMethodWithIs(object val)
{
if(val is (int id, int name) pair)
{
ConsoleWriteLine($"{pair.id}, {pair.name}");
}
}
//This one works
public void MyMethodWithAs(object val)
{
var pair = val as (int id, int name)?;
if(pair!=null)
{
ConsoleWriteLine($"{pair.id}, {pair.name}");
}
}
MyMethodWithIs 方法在编辑器中给出以下错误:
没有找到适合类型的解构实例或扩展方法
我的问题
为什么一个工作正常,而另一个却完全出错?我认为MyMethodWithIs 更具可读性,更适合我的情况,但由于出现错误,我无法使用它。
【问题讨论】:
-
AFAIK 值元组不存储项目名称信息,因此可能无法检查项目是否为 id 和 name。我猜它可能没有名字
if (val is (int, int) pair) -
@Slai 我也试过了,还是出现同样的错误。
-
if (val is ValueTuple<int,string> pair)虽然有效。有点相关:stackoverflow.com/questions/44706498/…
标签: c# valuetuple