【问题标题】:Is there a way I can generate a class with all the properties obtained from a List<string>?有没有办法可以生成一个具有从 List<string> 获得的所有属性的类?
【发布时间】:2012-09-06 10:13:54
【问题描述】:

我有一个 List 对象。在代码中,我要声明一个新的类,它的属性是动态生成的,都是从List对象中获取的。有什么办法可以做到吗?

例如:我有一个List&lt;string&gt; lstStr= "apple, pear, banana";,我想在代码中生成一个新类:

Class Foo{
   string apple;
   string pear;
   string banana;
}

【问题讨论】:

  • 您打算如何使用您创建的对象?
  • 我将创建一堆对象放入 List 并绑定到 Datagrid 以进行显示。

标签: c#


【解决方案1】:

我会使用另一个集合,例如 Dictionary

Dictionary<String, String> Foo = lstStr
                           .Distinct()
                           .ToDictionary(f => f, f => default(String));
// now you can get/set the elements in the following way:
String banana = Foo["banana"];
Foo["apple"] = "some apple";

【讨论】:

    【解决方案2】:

    如果你真的需要一个类,那么这可能是你可以使用 codedom 做的事情 - 要么将字符串解析为类定义字符串并从那里生成,要么使用字符串列表在循环它们时创建属性。

    有一个基础指南here

    【讨论】:

      【解决方案3】:

      如果您使用的是 c# 4 或更高版本,您可以使用动态特性,特别是 ExpandoObject。

          var x = new ExpandoObject() as IDictionary<string, Object>;
      foreach (var prop in lstStr)
      {
           x.Add(prop, "");
      }
      

      【讨论】:

        【解决方案4】:

        既然您在 cmets 中说过您的最终目标是将数据绑定到 DataGrid,我建议您使用 DataTable。您可以创建一个空白板,添加列(任何原始类型),然后使用相同的列模式填充任意数量的行。此外,您可以简单地将DataTable 绑定到DataGrid;它们旨在协同工作。

        【讨论】:

          【解决方案5】:

          你可以使用

          public static List<Foo> GetFooList() { .... }
          

          或从 List 对象扩展,但许多方法是虚拟的,因此您可能不会得到所有方法。

          public class FooList:List<Foo> { .... //add more } 
          

          并使用它

          public static FooList GetFooList() { .... } 
          

          链接: C# Generics : List<Object> or new class extends List <Object>

          【讨论】:

            猜你喜欢
            • 2020-02-23
            • 2010-11-23
            • 2019-07-05
            • 2023-03-23
            • 1970-01-01
            • 2021-05-17
            • 1970-01-01
            • 1970-01-01
            • 2015-04-18
            相关资源
            最近更新 更多