繁体   English   中英

忽略泛型已经推断的类型参数

[英]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");

因此将明确指定TResTRes导出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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM