C# 将Emit IL与内部类一起使用?
我有一个基类,它有一个嵌入的列表,所有子类都可以使用该列表返回一个已排序的集合 我一直在使用Activator.CreateInstance,但与一个简单的新函数相比,这是非常缓慢的 我找到了一种使用Emit-IL的方法来完成这项工作,速度几乎和new一样快,但是如果我的类不是公共的,我会得到一个MethodAccessException错误。这似乎很普遍 有办法解决这个问题吗 在此处生成类的代码: 此处与上述代码一起使用:C# 将Emit IL与内部类一起使用?,c#,performance,reflection,instantiation,reflection.emit,C#,Performance,Reflection,Instantiation,Reflection.emit,我有一个基类,它有一个嵌入的列表,所有子类都可以使用该列表返回一个已排序的集合 我一直在使用Activator.CreateInstance,但与一个简单的新函数相比,这是非常缓慢的 我找到了一种使用Emit-IL的方法来完成这项工作,速度几乎和new一样快,但是如果我的类不是公共的,我会得到一个MethodAccessException错误。这似乎很普遍 有办法解决这个问题吗 在此处生成类的代码: 此处与上述代码一起使用: public static List<T> Sorted
public static List<T> SortedCollection<T>(SPListItemCollection items, ListSortType sortType, List<Vote> votes) where T : IVotable
{
var returnlist = new List<T>();
var functionCreator = FastActivator.GenerateFunc<Func<SPListItem, List<Vote>, T>>();
for (int i = 0; i < items.Count; i++) { returnlist.Add(functionCreator(items[i], votes)); }
//Old code here
//Type genericType = typeof(T);
//for (int i = 0; i < items.Count; i++) { returnlist.Add((T)Activator.CreateInstance(genericType, new object[] { items[i], votes })); }
switch (sortType)
{
case ListSortType.Hot:
returnlist.Sort((p1, p2) => p2.HotScore.CompareTo(p1.HotScore));
break;
case ListSortType.Top:
returnlist.Sort((p1, p2) => p2.VoteTotal.CompareTo(p1.VoteTotal));
break;
case ListSortType.Recent:
returnlist.Sort((p1, p2) => p2.CreatedDate.CompareTo(p1.CreatedDate));
break;
}
return returnlist;
}
//Usage
//Post : BaseClass which has above method
return Post.SortedCollection<Post>(listItems,sortType,votes);
可以使用该方法生成与要访问的类成员关联的方法
生成的方法将对您关联的类型中的所有成员具有完全访问权限,并且该类将对其模块中的所有内部方法和成员具有访问权限。您可以使用该方法生成与要访问的类成员相关联的方法
生成的方法将具有对与之关联的类型中的所有成员的完全访问权限,并且该类将具有对其模块中的所有内部方法和成员的访问权限