【发布时间】:2018-10-03 05:09:47
【问题描述】:
将委托与泛型类一起使用时,会遇到问题。类是通用的,但方法不是。但是方法返回类型是泛型类型。
public abstract class BaseEntity {
public DateTime CreateDateTime { get; set; } = DateTime.Now;
public long CreateUserId { get; set; }
}
public class ClassA : BaseEntity {
}
class Program {
private delegate object MyDelegate(long id);
private static MyDelegate _myHandler;
static void Main(string[] args) {
var genericType = typeof(TestClass<>).MakeGenericType(typeof(ClassA));
var createMethod = genericType.GetMethod("CreateEntity");
_myHandler = (MyDelegate)Delegate.CreateDelegate(typeof(MyDelegate), null, createMethod);
var result = _myHandler(5);
}
}
class TestClass<T> where T : BaseEntity, new() {
public T CreateEntity(long userId) {
return new T() { CreateUserId = userId };
}
}
这段代码抛出异常。
更新 1: 修复代码以使其易于理解。
例外:
An unhandled exception of type 'System.NullReferenceException' occurred in Unknown Module.
Object reference not set to an instance of an object. occurred
【问题讨论】:
-
请提供完整的异常文本和堆栈跟踪。
-
你能解释一下你想要达到的目标吗?问题: 1. 您尝试使用泛型类型而不创建封闭类型。
TestClass<>没有向 .NET 指示它应该返回什么作为 T,那么它怎么知道呢? 2. 您尝试访问TestClass<>的实例方法,而无需先创建要使用的实例。 -
@John 我试图声明一个代表。我有一个通用类,这个类使用 DTO,我将它们转换为我的 db 对象。所以我需要用我的新数据库实体类型调用这个 CreateEntity 方法。
-
@PetSerAl 是的,因为除了 null 之外,抛出另一个例子。传递什么参数?