我有一个带有签名的方法
string GenericMethod<T>();
通常你会简单地调用它:
var result = GenericMethod<AType>();
但是,这不适用于我的情况,因为AType
它作为Type
.
下面的代码显示了我要去的地方。目前它错误为 //ERROR HERE。
在代码之前,快速解释一下:TestClass
同时实现ITestClass
和INotTestClass
。这很重要,因为这里的重点是,如果我通过 a TestClass
,我想用 调用该方法ITestClass
,而不是INotTestClass
。
TestClass
有一个方法,它只是在其泛型括号中返回类型的名称。
好的,这是单元测试形式的代码。
using System;
using NUnit.Framework;
namespace Ian.Tests
{
[TestFixture]
public class MiscTests
{
[Test]
public void WhoWeCallingTest()
{
var i = new TestClass();
i.TestGetTheType();
}
}
public class TestClass : ITestClass, INotTestClass
{
public void TestGetTheType()
{
var t1 = typeof(ITestClass);
var t2 = typeof(INotTestClass);
var t = GetType();
// so I can make a delegate normally, but no use as I don't have this info usually.
var dummyFunc = new MyDelegate<ITestClass>(GetTheType<ITestClass>);
var methodInfo = t.GetMethod("GetTheType");
var baseType = typeof(MyDelegate<>);
var delType = baseType.MakeGenericType(t1);
//ERROR HERE.
var del = Delegate.CreateDelegate(delType, this, methodInfo);
del.Method.Invoke(this, null);
}
public delegate string MyDelegate<T>();
public string GetTheType<T>()
{
return typeof(T).Name;
}
}
public interface ITestClass { }
public interface INotTestClass { }
}