【问题标题】:HyperPropertyDescriptor issue with .net framework 4.5.2.net 框架 4.5.2 的 HyperPropertyDescriptor 问题
【发布时间】:2020-07-07 11:32:02
【问题描述】:

我正在尝试将对象列表转换为数据表,并正在使用此响应 https://stackoverflow.com/a/5805044/1447718 中给出的解决方案。

我下载了超属性并将其重新编译为 4.5.2 并在我的应用程序中使用它。当我执行该方法时,我得到一列的空数据集。在调试时,我发现该行

PropertyDescriptorCollection properties =
            TypeDescriptor.GetProperties(typeof(T));

正在提供计数为 0 的属性对象。
我尝试用

替换该行
PropertyDescriptorCollection properties =
            TypeDescriptor.GetProperties(data.First().GetType()); 

还是没有运气。

谁能帮忙?谢谢。

【问题讨论】:

  • 我几乎可以肯定能提供帮助,但我真的需要看看你在这里使用的类型。例如,它真的有属性吗? (字段和属性是不同的东西)。明确地说:我想查看Foo,其中Foo 是泛型类型参数T 的参数
  • 谢谢马克。类型为 public class RequestData { public string d;公共数据类型 t;公共诠释我;我将拥有 IList 和 DataType 是一个枚举。

标签: .net list dataset fastmember


【解决方案1】:

来自 cmets:

public class RequestData {
    public string d;
    public DataType t;
    public int i;
}

这些是字段,而不是属性。 PropertyDescriptor 模型专注于属性,坦率地说,公共领域只是一种反模式。考虑将这些变成属性。最简单的方法是在每个后​​面加上{get;set;},就完成了。

public class RequestData {
    public string d {get;set;}
    public DataType t {get;set;}
    public int i {get;set;}
}

我个人会将它们重命名为更有意义,但这不会改变它们的工作方式。

【讨论】:

  • 顺便说一句,HyperPropertyDescriptor 是否适用于 .net 4.5.2 框架?
  • @user1447718 您必须回顾 nuget 历史才能找到实际针对 net452 的最后一个版本;问题是 net452 需要支持 - 在这里我的想法的更长版本:blog.marcgravell.com/2020/01/…
  • 这解决了我的问题。感谢您及时的帮助马克。不知道这是在 nuGet 中,让我尝试获取。我也在这里看到了 mattsmiller 的修复。 codeproject.com/Messages/4510470/…我需要复制它以避免任何溢出问题吗?
  • @user1447718 我不打算猜测 7 年前的评论。你看到问题了吗?如果是这样:在 github 上记录一个 repro。
  • @user1447718 是的,GitHub 主页上有一个SqlBulkCopy 示例:github.com/mgravell/fast-member#ever-needed-an-idatareader
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
相关资源
最近更新 更多