web-dev-qa-db-ja.com

名前に基づいてプロパティ値を取得する方法

名前に基づいてオブジェクトのプロパティの値を取得する方法はありますか?

たとえば、私が持っている場合:

public class Car : Vehicle
{
   public string Make { get; set; }
}

そして

var car = new Car { Make="Ford" };

プロパティ名を渡すことができ、プロパティ値を返すメソッドを書きたいです。すなわち:

public string GetPropertyValue(string propertyName)
{
   return the value of the property;
}
132
Coder 2
return car.GetType().GetProperty(propertyName).GetValue(car, null);
276
Matt Greer

リフレクションを使用する必要があります

public object GetPropertyValue(object car, string propertyName)
{
   return car.GetType().GetProperties()
      .Single(pi => pi.Name == propertyName)
      .GetValue(car, null);
}

本当に空想になりたい場合は、拡張メソッドにすることができます:

public static object GetPropertyValue(this object car, string propertyName)
{
   return car.GetType().GetProperties()
      .Single(pi => pi.Name == propertyName)
      .GetValue(car, null);
}

その後:

string makeValue = (string)car.GetPropertyValue("Make");
41
Adam Rackis

反射が欲しい

Type t = typeof(Car);
PropertyInfo prop = t.GetProperty("Make");
if(null != prop)
return prop.GetValue(this, null);
33
Chuck Savage

単純なサンプル(クライアントにリフレクションハードコードを記述しない)

class Customer
{
    public string CustomerName { get; set; }
    public string Address { get; set; }
    // approach here
    public string GetPropertyValue(string propertyName)
    {
        try
        {
            return this.GetType().GetProperty(propertyName).GetValue(this, null) as string;
        }
        catch { return null; }
    }
}
//use sample
static void Main(string[] args)
    {
        var customer = new Customer { CustomerName = "Harvey Triana", Address = "Something..." };
        Console.WriteLine(customer.GetPropertyValue("CustomerName"));
    }
7
harveyt

Adam Rackisの答えを拡張して、拡張メソッドを次のように汎用的にすることができます。

public static TResult GetPropertyValue<TResult>(this object t, string propertyName)
{
    object val = t.GetType().GetProperties().Single(pi => pi.Name == propertyName).GetValue(t, null);
    return (TResult)val;
}

必要に応じて、エラー処理も回避できます。

4
Cameron Forward

さらに、他の人が答えます、任意のオブジェクトのプロパティ値を取得するのは簡単です:

public static class Helper
    {
        public static object GetPropertyValue(this object T, string PropName)
        {
            return T.GetType().GetProperty(PropName) == null ? null : T.GetType().GetProperty(PropName).GetValue(T, null);
        }

    }

使用法は次のとおりです。

Car foo = new Car();
var balbal = foo.GetPropertyValue("Make");
3
Ali