IDictionary<int,string> myMethod()
{
var returnVal = ...;
return returnVal;
}
看起来这应该是可能的 - 创建一个自动获取方法返回类型的var - 但我找不到任何与之匹配的关键字。它存在吗?
答案 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;
}
当然,它会强制您以递归方式调用该方法。