개체 속성 인덱서 스타일에 액세스 할 수있는 도구, 라이브러리가 있습니까?C# 개체 속성 인덱서 스타일에 액세스
public class User
{
public string Name {get;set;}
}
User user = new User();
user.Name = "John";
string name = user["Name"];
아마도 여기 동적 키워드가 도움이 될 수 있습니까?
개체 속성 인덱서 스타일에 액세스 할 수있는 도구, 라이브러리가 있습니까?C# 개체 속성 인덱서 스타일에 액세스
public class User
{
public string Name {get;set;}
}
User user = new User();
user.Name = "John";
string name = user["Name"];
아마도 여기 동적 키워드가 도움이 될 수 있습니까?
인덱서에 대해 this을 확인하십시오. 사전은 속성을 사용하는 대신 모든 값과 키를 저장합니다. 이렇게하면 성능 저하없이 런타임에 새 속성을 추가 할 수 있습니다.
public class User
{
Dictionary<string, string> Values = new Dictionary<string, string>();
public string this[string key]
{
get
{
return Values[key];
}
set
{
Values[key] = value;
}
}
}
많은 개체가 있으므로 모든 개체에 대해이를 구현하는 것이 옵션이 아닙니다. – user256034
@ user256034 한 번만 수행하고 속성 대신 값을 사전에 저장하십시오. –
리플렉션 및 인덱서를 사용하여 직접 빌드 할 수 있습니다.
하지만 이러한 솔루션이 필요한 이유는 무엇입니까? 당신은 때까지이 작업을 수행 할 수없는이에 대한 인덱스를 사용하려는 경우
PropertyInfo info = user.GetType().GetProperty("Name");
string name = (string)info.GetValue(user, null);
그리고 그
public object this[string key]
{
get
{
PropertyInfo info = this.GetType().GetProperty(key);
if(info == null)
return null
return info.GetValue(this, null);
}
set
{
PropertyInfo info = this.GetType().GetProperty(key);
if(info != null)
info.SetValue(this,value,null);
}
}
클래스는 Indexer를 구현합니다.
내 실적에 해가되지 않습니까? – user256034
@ user256034 매우 그렇습니다. 그러나 런타임에 속성을 찾는 것은 매우 느립니다. 당신이 그것을 빨리 할 수있는 유일한 방법은 나의 구현이다. –
다이나믹을 사용하는 것만 큼. 역학은 본질적으로 필요에 따라 런타임에 컴파일됩니다. –
뭔가를 시도 할 수 있습니다 이름으로 속성 값을 얻기 위해 반사를 사용할 수
확실히 DynamicObject를 상속 받아 그렇게 할 수 있습니다.
http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.trygetindex.aspx
만 '객체'를 반환 (그리고 캐스트 할 필요) 또는 클래스에서만 문자열을 가지도록하기 위해 중 하나를 제한 할 다른 사람이 여기에 언급 된 간단한 인덱서 방법을 사용.
: 다른 곳에서 언급했듯이 동적 인 경우에도 TryGetIndex 함수 내부에서 값을 가져 오기 위해 리플렉션 또는 특정 형식의 조회를 사용해야합니다.
예제를 보여 주시겠습니까? – user256034
@ user256034 위의 링크는보기 좋은 예입니다. –
당신은 당신이 비슷한 할 리플렉션을 사용할 수있는 문자열 값을 기반으로 속성에 액세스하려면 다음 밖으로 관심
string name = typeof(User).GetProperty("Name").GetValue(user,null).ToString();
합니다. 왜 이것을하고 싶습니까? –
일부보고 작업을 수행하는 일반적인 방법을 구축하려고합니다. – user256034