[英]Ignorance of already inferred type parameters for generics
像这样的简单代码:
public TRes MyMethod<TIn, TRes>(TIn data)
{
//some logic
}
当它以这种方式调用时:
var result = MyMethod("test");
将警告类似“无法从用法中推断出类型参数,请尝试明确指定它们”。 虽然我认为指定TRes
没什么不好,但为什么编译器不像通常那样推断TIn
呢?
如果我们说泛型签名必须保持不变,我们不能写这个
var result = MyMethod<int>("test");
那么为什么不省略TIn
var result = <_,int>MyMethod("test");
因此将明确指定TRes
而TRes
导出TIn
。
我可以做这样的事情吗?
您不能只指定几个通用参数而忽略其他参数,您总是必须指定一个都不指定并依靠编译器为您推断它们(如果这甚至可能),或者一次全部指定。
如果您只想省略从您的方法返回的结果,您可以定义一些任意的通用参数,例如object
:
MyMethod<object>("Hello World");
或者创建一个简单地调用另一个重载并忽略其结果的重载:
void MyMethod<T>(T t)
{
MyMethod<object, T>(t);
}
这允许以下用法:
MyMethod<int>(3);
MyMethod(3);
var s = MyMethod<MyClass, int>(3);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.