【发布时间】:2011-09-16 22:06:44
【问题描述】:
这是一个简单的人为示例,但希望能说明我的查询。
public class Test
{
public string Name = "test";
}
public static class Ext
{
public static Test ConvertToTest<T1>(this T1 source)
{
return new Test();
}
public static T2 Convert<T1,T2>(this T1 source) where T2 : new()
{
return new T2();
}
}
ConvertToTest 只需要一个Type,所以下面编译
Ext.ConvertToTest<string>("hello");
"hello".ConvertToTest();
最后一个使用类型干扰,这意味着它也适用于匿名类,例如
var anon = (new { Name = "test" }) ;
anon.ConvertToTest();
然而,这被硬编码为始终使用类 Test,而我希望能够像在第二种方法中那样指定类型
我会写
Ext.Convert<string, Test>("hello");
这会编译,因为我在编译时知道这两种类型,但我不能将它与匿名类一起使用,而且我找不到使用类型推断和额外类型的方法
如果我能做类似的事情就好了
anon.Convert<,Test>() ;
并且编译器会知道将推理用于第一种类型(未指定)并将 Test 用作第二种类型。
有没有办法解决这个问题?
【问题讨论】:
标签: c# c#-3.0 extension-methods type-inference