반응형
문자열 이름으로 클래스 속성 설정 / 가져 오기
이 질문에 이미 답변이 있습니다.
내가하려는 것은 문자열을 사용하여 클래스의 속성 값을 설정하는 것입니다. 예를 들어 내 클래스에는 다음과 같은 속성이 있습니다.
myClass.Name
myClass.Address
myClass.PhoneNumber
myClass.FaxNumber
모든 필드는 string
유형이므로 항상 문자열이라는 것을 미리 알고 있습니다. 이제 DataSet
객체 로 할 수있는 것처럼 문자열을 사용하여 속성을 설정할 수 있기를 원합니다 . 이 같은:
myClass["Name"] = "John"
myClass["Address"] = "1112 River St., Boulder, CO"
이상적으로는 변수를 할당 한 다음 변수에서 해당 문자열 이름을 사용하여 속성을 설정하고 싶습니다.
string propName = "Name"
myClass[propName] = "John"
나는 성찰에 대해 읽고 있었고 아마도 그것을하는 방법 일 수도 있지만 클래스에서 속성 액세스를 그대로 유지하면서 어떻게 설정하는지 잘 모르겠습니다. 다음을 계속 사용할 수 있기를 원합니다.
myClass.Name = "John"
모든 코드 예제는 정말 훌륭합니다.
인덱서 속성 인 의사 코드를 추가 할 수 있습니다 .
public class MyClass
{
public object this[string propertyName]
{
get{
// probably faster without reflection:
// like: return Properties.Settings.Default.PropertyValues[propertyName]
// instead of the following
Type myType = typeof(MyClass);
PropertyInfo myPropInfo = myType.GetProperty(propertyName);
return myPropInfo.GetValue(this, null);
}
set{
Type myType = typeof(MyClass);
PropertyInfo myPropInfo = myType.GetProperty(propertyName);
myPropInfo.SetValue(this, value, null);
}
}
}
클래스에 인덱서를 추가하고 리플렉션을 사용하여 속성을 에이스 할 수 있습니다.
using System.Reflection;
public class MyClass {
public object this[string name]
{
get
{
var properties = typeof(MyClass)
.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var property in properties)
{
if (property.Name == name && property.CanRead)
return property.GetValue(this, null);
}
throw new ArgumentException("Can't find property");
}
set {
return;
}
}
}
이와 같은 것일 수 있습니까?
public class PropertyExample
{
private readonly Dictionary<string, string> _properties;
public string FirstName
{
get { return _properties["FirstName"]; }
set { _properties["FirstName"] = value; }
}
public string LastName
{
get { return _properties["LastName"]; }
set { _properties["LastName"] = value; }
}
public string this[string propertyName]
{
get { return _properties[propertyName]; }
set { _properties[propertyName] = value; }
}
public PropertyExample()
{
_properties = new Dictionary<string, string>();
}
}
참고 URL : https://stackoverflow.com/questions/10283206/setting-getting-the-class-properties-by-string-name
반응형
'Programing' 카테고리의 다른 글
URL의 글자 수 제한은 얼마입니까? (0) | 2020.11.12 |
---|---|
이중 체크 잠금에서 휘발성이 사용되는 이유 (0) | 2020.11.12 |
ConfigurationManager.AppSettings [Key]는 매번 web.config 파일에서 읽습니까? (0) | 2020.11.12 |
JavaScript : 빈 배열, []는 조건부 구조에서 참으로 평가됩니다. (0) | 2020.11.12 |
Python 3에서 True와 False의 다른 객체 크기 (0) | 2020.11.12 |