我有一个Alert <T>
个对象。
假设我想获取MyObject类型的所有警报,
我会有一个类型的集合
MyCollection<MyObject> : IList<Alert<MyObject>>
。
我如何实现该列表的方法?
答案 0 :(得分:1)
答案 1 :(得分:0)
我认为解决方案应该是某种动态构造函数。
答案 2 :(得分:0)
我想我找到了一个解决方案,但我还没有机会测试它。
public class Base
{
private delegate Base ConstructorDelegate(int someParam);
public class ClassReference
{
Type currentType = typeof(Base);
public Base Create<U>() where U : Base
{
ConstructorInfo ci = currentType.GetConstructor(BindingFlags.Instance |
BindingFlags.Public, null, Type.EmptyTypes, null);
DynamicMethod dm = new DynamicMethod("CreateInstance", typeof(Base), Type.EmptyTypes, typeof(ClassReference));
ILGenerator il = dm.GetILGenerator();
il.Emit(OpCodes.Newobj, ci);
il.Emit(OpCodes.Ret);
ConstructorDelegate del = (ConstructorDelegate)dm.CreateDelegate(typeof(ConstructorDelegate));
return del();
}
public Base Create<U>(int someParam) where U : Base
{
ConstructorInfo ci = currentType.GetConstructor(BindingFlags.Instance |
BindingFlags.Public, null, new Type[] { typeof(int) }, null);
DynamicMethod dm = new DynamicMethod("CreateInstance", typeof(Base), new Type[] {
typeof(int) }, typeof(ClassReference));
ILGenerator il = dm.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Newobj, ci);
il.Emit(OpCodes.Ret);
ConstructorDelegate del = (ConstructorDelegate)dm.CreateDelegate(typeof(ConstructorDelegate));
return del(someParam);
}
private ClassReference(Type type)
{
currentType = type;
}
internal ClassReference() { }
public static implicit operator ClassReference(Type input)
{
if (!typeof(Base).IsAssignableFrom(input))
throw new Exception(String.Format("Type {0} must derive from {1}", input,
typeof(Base)));
return new ClassReference(input);
}
}
}
答案 3 :(得分:0)
我想我找到了一个重要的内容:
entityObject = objectContext.GetEntityByKey<T>(id);
从datacontext获取实体的通用方法