【问题标题】:PropertyInfo for a DataRow from its PropertyDescriptor来自其 PropertyDescriptor 的 DataRow 的 PropertyInfo
【发布时间】:2013-08-17 16:20:37
【问题描述】:

如何从 DataRow 的 PropertyDescriptor 获取 PropertyInfo。

//pd is a PropertyDescriptor
var propertyinfo = pd.ComponentType.GetProperty(pd.Name);

上述代码适用于列表集合,但在使用 DataTable 时无法正常工作。

对此有什么想法吗?

【问题讨论】:

  • 你以后用propertyInfo做什么?我猜想得到财产的价值,但还有什么?
  • 这样我需要获取 CustomAttributes..
  • 好的,当与DataTable 合作时,pd.ComponentType 会给您带来什么?
  • 它为 DataTable 返回 null.. ComponentType 是 DataRowView 的类型..

标签: c# datatable propertyinfo propertydescriptor


【解决方案1】:

PropertyInfo 是反射世界,其中类型具有显式 CLI 属性。 DataTable不属于那个世界;它使用System.ComponentModel 灵活的属性模型,通过TypeDescriptorPropertyDescriptor 等。基本上:在CLI 意义上没有属性PropertyDescriptor 可用于(并且被用于)以更灵活、动态的方式描述“属性”,其中布局未指定为类型,而是自定义定义,通常在运行时动态。

所以不:你不能这样做。这个问题没有意义;或者至少,在一般情况下它不会。还有“类型化数据集”,但坦率地说,我强烈建议远离它们。

顺便说一句,您可以为 any 类型发明自己的伪属性 - 对此有扩展点(TypeDescriptorITypedListICustomTypeDescriptorTypeConverter 等);但只有明确使用System.ComponentModel 的代码才能看到它们。

【讨论】:

  • 感谢您的详细回答...我想知道另一件事,如何将验证属性添加到 DataColumn..
  • @Sankarann 在此上下文中定义“验证属性”;哪个验证框架?
  • @Sankarann 从技术上讲,PropertyDescriptor 可以描述任意属性 - 但是:它取决于选择支持 PropertyDescriptor 的验证框架。再说一遍:什么验证框架?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 2014-11-23
  • 1970-01-01
  • 2020-09-02
  • 2013-09-05
相关资源
最近更新 更多