我正在尝试使该方法返回一个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)'的类型参数不能为 从用法推断。尝试显式指定类型参数。
答案 0 :(得分:3)
编译器无法查看Tuple.Create(null, null)
并告诉您您打算创建Tuple<DateTime?, DateTime?>
。然后从返回Tuple<DateTime?, DateTime?>
的方法中返回它的事实并不重要:编译器不会考虑这一点。
使用以下之一:
new Tuple<DateTime?, DateTime?>(null, null)
Tuple.Create((DateTime?)null, (DateTime?)null)
答案 1 :(得分:2)
作为@ canton7答案的补充答案,我只想补充一点,C#7引入了一个名为ValueTuple的新结构,该结构具有编译器的显式支持:
因此您的代码可以利用它,如下所示:
public (DateTime?, DateTime?) GeTuple() => boolean-expression ? (startDate, endDate) : (default(DateTime?), default(DateTime?));
请注意,(DateTime ?, DateTime?)只是:的语法糖:
System.ValueTuple<DateTime?, DateTime?>.
此Stackoveflow question的答案更深入地介绍了Tuple类和ValueTuple结构之间的区别以及何时使用什么。