方法可以使用自动变量来推断返回类型吗?

时间:2016-04-07 16:25:10

标签: c# .net-4.5

IDictionary<int,string> myMethod()
{
 var returnVal = ...;

 return returnVal;
}

看起来这应该是可能的 - 创建一个自动获取方法返回类型的var - 但我找不到任何与之匹配的关键字。它存在吗?

2 个答案:

答案 0 :(得分:0)

按照您尝试的方式创建对象将无法正常工作。变量的类型在声明时确定 - 编译器并不关心你如何使用它(大多数情况下)。所以,仅仅因为你返回它并不意味着编译器会自动推断出初始类型是什么。

Wjdavis15的答案(显然已经删除了 - 它使用了泛型并将返回值初始化为default(T))有点有效,但它非常有限。它适用于值类型,但引用类型变量将被初始化为null ...除非您计划在开始时返回null,否则这是非常无用的。相反,你可能会这样做:

private T MyMethod<T>() where T : new()
{
    var retVal = new T();
    ...
    return retVal;
}

// Use the method like so:
var dict = MyMethod<IDictionary<int,string>>();

只要T具有无参数构造函数,这将起作用。当然,问题在于该方法是通用的,这意味着它可以与任何类类型一起使用,而不仅仅是您想到的一个特定类。您最好使用非通用方法。

总之,不,您描述的功能在C#中不存在。有一些类似于你想要的解决方法,但是以你想要的方式使用它们是麻烦和混乱的,所以你只需要在声明中定义变量是什么就更好了。

答案 1 :(得分:-1)

如果以递归方式调用该方法,则可以使用局部变量来推断该方法的返回值的类型。

public static int Foo()
{
    var bar = Foo();
    return bar;
}

当然,它会强制您以递归方式调用该方法。