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;
}
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";
コメントで、ここでの最終目標はデータを にバインドすることであると述べているので、DataGrid
を使用することをお勧めしますDataTable
。空白のスレートを作成し、(任意のプリミティブ型の) 列を追加してから、任意の数の行にすべて同じ列スキーマを設定できます。DataTable
さらに、をDataGrid
;に簡単にバインドできます。それらは連携するように設計されています。
クラスが本当に必要な場合は、codedom を使用して実行できる可能性があります。文字列をクラス定義文字列に解析してそこから生成するか、文字列のリストを使用してループしながらプロパティを作成します。
ここに基本へのガイドがあります。
C# 4 以降を使用している場合は、ダイナミクス、特に ExpandoObject を使用してこれを行うことができます。
var x = new ExpandoObject() as IDictionary<string, Object>;
foreach (var prop in lstStr)
{
x.Add(prop, "");
}
あなたが使用することができます
public static List<Foo> GetFooList() { .... }
またはリストオブジェクトから拡張しますが、多くのメソッドは仮想であるため、すべてのメソッドで終わるとは限りません。
public class FooList:List<Foo> { .... //add more }
そしてそれを使用して
public static FooList GetFooList() { .... }
リンク: C# Generics: List<Object> または new class extends List <Object>