当我写这需要一个通用的参数变量的大型静态方法。我调用这个方法,并且框架抛出一个System.InvalidProgramException异常。甚至在方法的第一行执行之前抛出此异常。“CLR检测到无效的程序。”调用泛型方法
我可以创建一个静态类,它采用了通用的参数,然后使这个静态类的方法,和一切工作正常。
这是一个.NET的缺陷,或者是有我打破这里一些不起眼的通用规则?
为了完整起见,我已经包括该失败的方法,并且其传递方法。请注意,这里使用了一些其他类的从我自己的库(如GridUtils),并且这些类在此不再赘述。我不认为实际意义的问题:问题是为什么运行时崩溃的方法,甚至开始之前。
这将引发异常(我与Visual Studio 2005编程,所以也许这已经在Visual Studio 2008中消失)的第一行调用之前:
private delegate void PROG_Delegate<TGridLine>(DataGridView dgv, IEnumerable<TGridLine> gridLines, string[] columns);
public static void PopulateReadOnlyGrid<TGridLine>(DataGridView dgv, IEnumerable<TGridLine> gridLines, string[] columns)
{
if (dgv.InvokeRequired)
{
dgv.BeginInvoke
(
new PROG_Delegate<TGridLine>(PopulateReadOnlyGrid<TGridLine>),
new object[] { dgv, gridLines, columns }
);
return;
}
GridUtils.StatePreserver statePreserver = new GridUtils.StatePreserver(dgv);
System.Data.DataTable dt = CollectionHelper.ConvertToDataTable<TGridLine>((gridLines));
dgv.DataSource = dt;
dgv.DataMember = "";
dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
GridUtils.OrderColumns<TGridLine>(dgv, columns);
statePreserver.RestoreState();
dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
}
这工作得很好:
public static class Populator<TGridLine>
{
private delegate void PROG_Delegate(DataGridView dgv, IEnumerable<TGridLine> gridLines, string[] columns);
public static void PopulateReadOnlyGrid(DataGridView dgv, IEnumerable<TGridLine> gridLines, string[] columns)
{
if (dgv.InvokeRequired)
{
dgv.BeginInvoke
(
new PROG_Delegate(PopulateReadOnlyGrid),
new object[] { dgv, gridLines, columns }
);
return;
}
GridUtils.StatePreserver statePreserver = new GridUtils.StatePreserver(dgv);
System.Data.DataTable dt = CollectionHelper.ConvertToDataTable<TGridLine>((gridLines));
dgv.DataSource = dt;
dgv.DataMember = "";
dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
GridUtils.OrderColumns<TGridLine>(dgv, columns);
statePreserver.RestoreState();
dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
}
}
这是用于ASP.NET,WinForms还是什么?什么是GridUtils命名空间? – GregUzelac 2008-10-21 02:03:58
GridUtils命名空间是我自己的库的一部分。我会澄清它的消息,谢谢。 – 2008-10-21 02:05:05