5

次の構造の学生クラスがあります。

    public sealed class Student
    {
       public string Name {get;set;}
       public string RollNo {get;set;}
       public string standard {get;set;}
       public bool IsScholarshipped {get;set;}
       public List<string> MobNumber {get;set;}
    }

Studentクラスのこれらのプロパティを次のような配列で取得するにはどうすればよいですか?

     arr[0]=Name;
     arr[1]=RollNo; 
      .
      .
      .
     arr[4]=MobNumber

そして、これらのプロパティのタイプは、

     arr2[0]=string;
     arr2[1]=string;
      .
      .
      .
     arr2[4]=List<string> or IEnumerable

、コードのチャンクで説明してください。

4

4 に答える 4

10
var type = model.GetType();
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);

の配列が得られますPropertyInfo。次に、これを実行して名前だけを取得できます。

properties.Select(x => x.Name).ToArray();
于 2012-11-22T12:49:37.740 に答える
6

リフレクションを使用できます:

foreach (PropertyInfo prop in typeof(Student).GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
   '''
}
于 2012-11-22T12:47:43.757 に答える
4

GetProperty次のように、 の結果に対して LINQ を使用できます。

var props = typeof(Student).GetProperties();
var names = props
    .Select(p => p.Name)
    .ToArray();
var types = props
    .Select(p => p.PropertyType)
    .ToArray();
for (int i = 0 ; i != names.Length ; i++) {
    Console.WriteLine("{0} {1}", names[i], types[i]);
}

印刷されるものは次のとおりです。

Name System.String
RollNo System.String
standard System.String
IsScholarshipped System.Boolean
MobNumber System.Collections.Generic.List`1[System.String]
于 2012-11-22T12:51:38.940 に答える
0

この目的で operator [] のオーバーロードを使用することができます。プロパティは、PropertyInfo を使用してマップできます。

public sealed class Student
{
  public string Name { get; set; }
  public string RollNo { get; set; }
  public string Standard { get; set; }
  public bool IsScholarshipped { get; set; }
  public List<string> MobNumber { get; set; }

  public object this[int index]
  {
    get
    {
      // Note: This may cause IndexOutOfRangeException!
      var propertyInfo = this.GetType().GetProperties()[index];
      return propertyInfo != null ? propertyInfo.GetValue(this, null) : null;
    }
  }

  public object this[string key]
  {
    get
    {
      var propertyInfo = this.GetType().GetProperties().First(x => x.Name == key);
      return propertyInfo != null ? propertyInfo.GetValue(this, null) : null;
    }
  }
}

次に、この方法でクラスを使用できます。

var student = new Student { Name = "Doe, John", RollNo = "1", IsScholarshipped = false, MobNumber = new List<string>(new[] { "07011223344" }) };

var nameByIndex = student[0] as string;
var nameByKey = student["Name"] as string;

msdnで [] 演算子の詳細を参照してください。

このようにインデックスでプロパティにアクセスすると、プロパティの順序が制御なしで簡単に変更されるため、エラーが発生しやすいことに注意してください。

于 2012-11-22T13:12:35.567 に答える