이름을 기준으로 객체의 속성 값을 얻는 방법이 있습니까?
예를 들어 내가 가지고 있다면 :
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;
}
답변
return car.GetType().GetProperty(propertyName).GetValue(car, null);
답변
리플렉션을 사용해야합니다
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");
답변
당신은 반사를 원한다
Type t = typeof(Car);
PropertyInfo prop = t.GetProperty("Make");
if(null != prop)
return prop.GetValue(this, null);
답변
간단한 샘플 (클라이언트에서 쓰기 리플렉션 하드 코드없이)
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"));
}
답변
또한 다른 사람들 은 다음과 같은 확장 방법을 사용 하여 모든 객체 의 속성 값을 쉽게 얻을 수 있다고 대답 합니다 .
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");
답변
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;
}
원하는 경우 오류 처리를 던질 수도 있습니다.
답변
반영을 피하기 위해 요청한 특성에서 해당 값을 리턴하는 사전 값 파트에서 고유 이름을 키 및 함수로 사전을 설정할 수 있습니다.