提问者:小点点

tuple.create:无法从用法推断方法的类型参数


我试图使方法返回一个元组:Tuple<;datetime?,datetime?>

如果代码能够生成两种DateTime类型,I'm将使用tuple.create创建返回语句,其中:

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)”的类型参数。请尝试显式指定类型参数。


共2个答案

匿名用户

编译器无法查看tuple.create(null,null)并告诉您要创建一个tuple。它是从返回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结构之间的区别以及何时使用what。