繁体   English   中英

Tuple.Create:无法从用法中推断出方法的类型参数

[英]Tuple.Create : The type arguments for method cannot be inferred from the usage

我正在尝试使该方法返回一个元组: Tuple<DateTime?, DateTime?>

如果代码能够生成两种DateTime类型,则使用Tuple.Create创建带有以下内容的return语句:

public Tuple<DateTime?, DateTime?> GeTuple()
{
    if (something)
    {
        return Tuple.Create(startDate, endDate);
    }
    else
    {
        return Tuple.Create(null, null); //--> This line produce the error.
    }
}

但出现以下错误:

无法从用法中推断出方法'Tuple.Create(T1,T2)'的类型参数。 尝试显式指定类型参数。

编译器无法查看Tuple.Create(null, null)并告诉您要创建Tuple<DateTime?, DateTime?> 然后从返回Tuple<DateTime?, DateTime?>的方法返回它的事实无关紧要:编译器不会考虑这一点。

使用以下之一:

new Tuple<DateTime?, DateTime?>(null, null)

Tuple.Create((DateTime?)null, (DateTime?)null)

作为@ canton7答案的补充答案,我只想补充一点,C#7引入了一个名为ValueTuple的新结构,该结构具有编译器的显式支持:

因此,您的代码可以利用它,如下所示:

public (DateTime?, DateTime?) GeTuple() => boolean-expression ? (startDate, endDate) : (default(DateTime?), default(DateTime?));

请注意,(DateTime ?, DateTime?)只是以下语法的糖:

System.ValueTuple<DateTime?, DateTime?>.

这个Stackoveflow问题的答案更深入地介绍了Tuple类和ValueTuple结构之间的区别以及何时使用什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM