0

私のクラス

class person
{
    public string name;
    public string age;
    public string height;
    public string weight;
}

これは私がやりたいことです...

person john = new person();
int i=0;

List<string> myList = new List<string>() { "John", "22", "174cms" ,"60kgs"};  
foreach(property in john)
{
    property = myList[i].toString();
    i++;
} 

どうすればいいですか?それとも実際にこれを行うことができますか?

4

5 に答える 5

2

いいえ、とにかく簡単ではありません。これは通常、変数名を何度も書き出す手間を省くオブジェクト初期化子を使用して行われます。

person john = new person
{
    name = "John",
    age = "22",
    height = "174cms",
    weight = "60kgs"
};

リフレクションを使用してこのようなことを行うこともできますが、値を th インデックスに割り当てるため、型の安全性が失われi、プロパティを抽出したときの順序がどのようになるかわかりません。リフレクションは C# のかなり高度な (そして潜在的に危険な) 部分であり、本当に必要になるまでは使用しないほうがよいでしょう。

于 2013-03-31T13:22:22.263 に答える
1

これらの投稿を見たことがありますか?

クラスのプロパティのリストを取得するには?

リフレクションを使用してプロパティの文字列名を取得する

これがお役に立てば幸いです。リストの代わりに、データテーブルを使用して、各列にクラスの各プロパティの名前を付けることができます。

于 2013-03-31T13:28:42.353 に答える
0

次のようなリフレクションでこれを行うことができます

john.GetType().GetProperties();

しかし - しないでください!実装を変更して、より良い方法にすることを検討してください。
たとえば、このように人物の詳細を含むリストを使用する必要があり、myList プロパティが常に同じ順序である場合は、次のように john 固有のプロパティを更新します。

john.name = myList[0];
..

しかし、ソリューションを再設計することをお勧めします。

于 2013-03-31T13:23:49.600 に答える
0

Type.GetPropertiesプロパティの取得に使用できます

PropertyInfo[] info = john.GetType().GetProperties();

残念ながら説明書には

解説
GetProperties メソッドは、アルファベット順や宣言順など、特定の順序でプロパティを返すわけではありません。プロパティが返される順序はさまざまであるため、コードはプロパティが返される順序に依存してはなりません。

したがって、手動でinfowithを一致させる必要があります。myList

于 2013-03-31T13:25:34.397 に答える
0

そのようにそれを行うには、長い道のりのようなものです。リストが常にその形式になることがわかっている場合は、次のようにします。

var john = new person 
{
    name = myList[0],
    age = myList[1],
    height = myList[2],
    weight = myList[3]
}
于 2013-03-31T13:30:00.513 に答える