我有一个使用Generics调用另一个函数的函数
现在我想将内部函数的类型作为参数传递给外部函数:
void MyFunction()
{
CallFunction<ISomeInterface>(); // here ISomeInterface should be a parameter to MyFunction
}
我已尝试使用<T>
和typeof
以及Type
但未成功。
编辑: 尝试:
void MyFunction<T>()
void MyFunction(Type type)
CallFunction<typeof(parameter)>();
答案 0 :(得分:1)
你可以做的是使MyFunction
通用并将type参数传递给被调用的方法:
void MyFunction<T>()
{
CallFunction<T>();
}
然后你可以使用:
来调用它MyFunction<ISomeInterface>();
编辑: CallFunction
似乎对其类型参数有约束。 MyFunction
需要具有相同的约束:
如果你有
CallFunction<T>() where T : class { /* .. */ }
然后
void MyFunction<T>() where T : class { /* .. */ }
答案 1 :(得分:-1)
你需要做这样的反思:
void Main()
{
MyFunction(typeof(Foo));
}
void MyFunction(Type someType)
{
var method =
this
.GetType()
.GetMethod(
"CallFunction",
BindingFlags.Instance | BindingFlags.NonPublic)
.MakeGenericMethod(someType);
method.Invoke(this, null);
}
void CallFunction<T>()
{
Console.WriteLine(typeof(T).Name);
}
public class Foo { }
将Foo
输出到控制台。