【问题标题】:Creating class members during run time - C#在运行时创建类成员 - C#
【发布时间】:2017-04-27 17:17:03
【问题描述】:

我有一个这样定义的简单类:

public class StickColumns
{
    public string wellname { get; set; }
    public double WellLength { get; set; }
} 

在代码中,我得到一些数据为list<double> perfdepth;假设这是perfdepth1,perfdepth2,perfdepth3。当然,这个列表是动态的,因此我事先不知道将我的类定义更改为:

 public class StickColumns
 {
     public string wellname { get; set; }
     public double WellLength { get; set; }
     public double perfdepth1 { get; set; }
     public double perfdepth2 { get; set; }
     public double perfdepth3 { get; set; }
 } 

可以在运行时创建这些新成员吗? 我认为我需要这个的原因是因为 WPF 中的数据绑定。最终我需要显示“点系列”; Perfdepth1 作为一个系列,perfdepth2 作为另一个系列,依此类推,即 Perfdepth 的动态数量。

如果有更简单的方法来做到这一点,我全神贯注!

【问题讨论】:

  • 虽然这当然是可能的,但要做到这一点要困难得多。我建议另一种方法,也许使用 List?
  • @FailedUnitTest:每个成员都将用作 WPF 数据绑定中的 series.Valuememberpath,这就是原因。 List 在那里不起作用。
  • @user7157732 您尝试做的所有事情都有可能,您可以用字典替换

标签: c#


【解决方案1】:

您可能只想将动态类型与ExpandoObject..一起使用。

dynamic stickColumns = new ExpandoObject();
stickColumns.wellName  = "Something";
stickColumns.perfdepth1 = "Something Else";

它有它的缺点,因为它确实意味着您最终会遇到运行时错误等......但它对于这种类型的场景很有用。

【讨论】:

  • 谢谢。然后可以在可观察的集合中使用它吗?
  • 它会是 observablecollection 或对象,但会包含棒列中的数据。我认为它会起作用。
  • 伙计,我对如何使用它感到困惑。在您的示例中,您是否假设班级中已经存在“perfdepth1”成员?而你只是在填充值?
  • 没有。您需要在 msdn 上查找 ExpandoObject 以获得良好的描述。基本上,它是一个允许您使用它动态添加类成员的对象。还要看看匿名类。两者都可以分配给dynamic,并且都可以用于动态构造对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 2017-03-19
相关资源
最近更新 更多