传递接口类型以进行转换作为参数

时间:2018-04-30 06:26:43

标签: c# .net generics

我有一个使用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)>();

2 个答案:

答案 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输出到控制台。