假设我已经创建了这样的方法
private void Test<t>(t str)
{
}
现在从另一种方法我称之为
private void BtnClick()
{
string a = "";
test<Here I Want To assign The Type what ever the type of 'a' is>();
}
我该怎么做?
答案 0 :(得分:2)
好吧,如果a
是一个字符串,你可以写:
Test<string>(a);
如果a
是int
,您可以写:
Test<int>(a);
非常明显。如果您事先不知道a
的类型,那意味着BtnClick
应该是通用的,问题就会转移到BtnClick
的来电者:
private void BtnClick<T>()
{
T a = ...;
Test<T>(a);
}
C#2.0及更高版本提供了类型推断,因此您不必指定类型:
Test(a);
答案 1 :(得分:1)
您只需调用传递a
的函数作为参数。类型推断将决定a
的T应该是什么。
static void Main()
{
string temp = "blah";
Test(temp);
Console.Read();
}
private static void Test<T>(T input)
{
Console.WriteLine(typeof(T).ToString());
}
System.String
将打印到控制台。
编辑:但是,是的,缺少类型推断,当您知道变量的类型时,您始终可以明确表示类型。 Test<string>(temp);
答案 2 :(得分:0)
在您的示例中,a
始终为string
,因此您只需使用Test<string>(a)
或Test(a)
。但是,如果你的意思是某个Type
实例悬挂在某个地方,那么你就会进入反思区域。请注意,这是有效的,但如果在紧密循环中使用,则速度很慢,因此请确保您了解性能方面;
object arg = ...;
MethodInfo method = typeof(YourType)
.GetMethod("Test", BindingFlags.NonPublic | BindingFlags.Instance)
.MakeGenericMethod(arg.GetType());
method.Invoke(this, new object[] { arg });