C# 忽略泛型的已推断类型参数

C# 忽略泛型的已推断类型参数,c#,generics,types,C#,Generics,Types,简单的代码如下: public TRes MyMethod<TIn, TRes>(TIn data) { //some logic } 将发出类似“无法从用法推断类型参数,请尝试显式指定它们”的警告。虽然我认为指定TRes没有什么不好的地方,为什么编译器不像通常那样推断TIn 如果我们说泛型签名必须保持不变,我们就不能写这个 var result = MyMethod<int>("test"); 因此,将显式指定TRes,同时推导TIn 我可以这样做吗?您不能只指示几

简单的代码如下:

public TRes MyMethod<TIn, TRes>(TIn data)
{
//some logic
}
将发出类似“无法从用法推断类型参数,请尝试显式指定它们”的警告。虽然我认为指定
TRes
没有什么不好的地方,为什么编译器不像通常那样推断
TIn
如果我们说泛型签名必须保持不变,我们就不能写这个

var result = MyMethod<int>("test");
因此,将显式指定
TRes
,同时推导
TIn


我可以这样做吗?

您不能只指示几个通用参数而忽略其他参数,您必须始终指定一个参数,或者完全不指定,然后依靠编译器为您推断它们(如果可能的话),或者一次全部指定

如果您只想忽略从方法返回的结果,您可以定义一些任意的泛型参数,例如
object

MyMethod<object>("Hello World");
MyMethod(“你好世界”);
或者创建一个重载,该重载只调用另一个重载并忽略其结果:

void MyMethod<T>(T t)
{
    MyMethod<object, T>(t);
}
void MyMethod(T)
{
MyMethod(t);
}
这允许以下用途:

MyMethod<int>(3);
MyMethod(3);
var s = MyMethod<MyClass, int>(3);
MyMethod(3);
方法(3);
var s=MyMethod(3);

您不能只定义一些通用参数。你必须一次决定所有的事情。不管怎样,我无法想象你到底想要达到什么目标。返回未指定类型的对象有什么好处?换句话说:
result
应该是哪种类型?如果你不知道它的类型,你就没什么办法了,是吗?
所以主要的问题是如何用正确的方式写这一切?
你知道答案-你需要完全明确(而不是半明确)。他们为什么这样做?可能是因为它更简单。您还可以重载它
publictresmymethod(对象数据)=>MyMethod(数据)
void MyMethod<T>(T t)
{
    MyMethod<object, T>(t);
}
MyMethod<int>(3);
MyMethod(3);
var s = MyMethod<MyClass, int>(3);