访问DataRowChangeEventArgs非公共成员

时间:2018-11-29 05:23:41

标签: wpf datatable

如何访问DataRowChangeEventArgs非公共成员。像_rowID,LastChangedColumn等。

我尝试了反思,但我无法为任何非公开成员获得价值。

1 个答案:

答案 0 :(得分:0)

DataRowChangeEventArgs没有像_rowID这样的非公开成员。
我认为您的意思是DataRow,可以从DataRowChangeEventArgs中检索到

对于字段,请尝试以下操作:

var value = typeof(DataRow).GetField("_rowID", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(dataRowChangeEventArgs.Row);

对于属性,请尝试以下操作:

var value = typeof(DataRow).GetProperty("rowID", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(dataRowChangeEventArgs.Row);

如果您在短时间内经常调用这段代码,我建议创建一个委托(显着提高性能)

var getDel = (Func<DataRow, long>)Delegate.CreateDelegate(typeof(Func<DataRow,long>), typeof(DataRow).GetProperty("rowID", BindingFlags.Instance | BindingFlags.NonPublic).GetMethod);
var value = getDel(dataRowChangeEventArgs.Row);

对于Fields,这有点复杂。参见Is there a way to create a delegate to get and set values for a FieldInfo?