我有一个 List 对象。在代码中,我要声明一个新的类,它的动态生成的属性都是从List对象中获取的。有没有办法我可以做到这一点?
例如:我有一个List<string> lstStr= "apple, pear, banana";
并且我想在代码中生成一个新类:
Class Foo{
string apple;
string pear;
string banana;
}
我有一个 List 对象。在代码中,我要声明一个新的类,它的动态生成的属性都是从List对象中获取的。有没有办法我可以做到这一点?
例如:我有一个List<string> lstStr= "apple, pear, banana";
并且我想在代码中生成一个新类:
Class Foo{
string apple;
string pear;
string banana;
}
你可以使用
public static List<Foo> GetFooList() { .... }
或从 List 对象扩展,但许多方法是虚拟的,因此您可能不会得到所有方法。
public class FooList:List<Foo> { .... //add more }
并使用它
public static FooList GetFooList() { .... }
如果你真的需要一个类,那么这可能是你可以使用 codedom 做的事情 - 要么将字符串解析为类定义字符串并从那里生成,要么使用字符串列表在循环它们时创建属性。
这里有基础知识指南。
如果您使用的是 c# 4 或更高版本,您可以使用动态特别是 ExpandoObject 来执行此操作。
var x = new ExpandoObject() as IDictionary<string, Object>;
foreach (var prop in lstStr)
{
x.Add(prop, "");
}
我会使用另一个集合,例如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";
由于您在评论中说过您的最终目标是将数据绑定到 aDataGrid
我建议您使用DataTable
. 您可以创建一个空白板,添加列(任何原始类型),然后使用相同的列模式填充任意数量的行。此外,您可以轻松地将 ; 绑定DataTable
到DataGrid
; 它们被设计为一起工作。