집 >백엔드 개발 >C#.Net 튜토리얼 >C#에서 개체 속성 이름을 통해 값의 인스턴스를 수정하는 방법
출처: csdn
객체 속성에 값을 할당하는 것은 PropertyInfo.SetValue()를 통해 수행할 수 있지만, 값의 유형은 속성과 일치해야 한다는 점에 유의하세요.
객체 인스턴스를 생성하는 두 가지 방법:
1.
var obj = Assembly.Load("AssemblyName").CreateInstance("AssemblyName"+"ClassFullName");
2.
var obj = Activator.CreateInstance(ClassType);
인스턴스를 생성한 후 이제 현재 인스턴스의 속성에 값을 할당할 수 있습니다. 할당됩니다.
var property = obj.GetType().GetProperty("PropertyName");//此时可以使用GetProperty获取属性数组,循环进行赋值,这里主要讲解类型问题。
할당은 PropertyInfo.SetValue() 메서드를 통해 수행할 수 있습니다. 자세한 내용은 MSDN을 참조하세요.
사례 1, 속성 유형은 알려진 유형입니다. 예: int
int value=500; property.SetValue(obj,value,null);
여기서 값 유형은 속성 유형과 일치해야 하며 그렇지 않으면 TargetException이 발생한다는 점에 유의해야 합니다.
사례 2, 속성 유형은 알려진 유형이고 원래 값은 다른 유형입니다. 예: 대상 유형은 int이고 값은 string
string value="500"; property.SetValue(obj,int.TryParse(value),null);//类型转换。
처음 두 경우는 매우 간단합니다. 때로는 비즈니스가 더 복잡해지고 대상 유형이 불확실하며 프로그램이 실행될 때 판단해야 합니다. .
사례 3, 속성 유형이 알 수 없는 비제네릭 유형이고 대상 유형이 확실하지 않은 경우 유형 변환을 수행하는 방법입니다.
object value="500"; property.SetValue(obj,Convert.ChangeType(value,property.PropertyType),null);//类型转换。
이렇게 하면 대부분의 문제가 해결됩니다.
세 번째 상황에서 제네릭이 아닌 유형을 강조한 것을 눈치채셨는지 모르겠습니다. 제네릭 유형이 작동하지 않나요?
네. Convert.ChangeType() 메서드만 사용했는데 유형 변환에서 여전히 오류가 보고되는 경우 먼저 다음 코드를 살펴보세요.
대상 유형과 값 유형이 일치하더라도 Convert.ChangeType()을 통해 변환할 때 여전히 오류가 보고됩니다.
이 문제를 해결하려면 먼저 속성 값 유형을 기본 유형으로 변환한 후 변환 변환을 수행해야 합니다. 코드를 보면 Convert.ChangeType()을 사용하여 null 허용 유형을 변환할 때 오류가 보고되지 않습니다.
기본 판단 검증을 추가하면 코드가 더욱 완성됩니다.
위 내용은 C#에서 개체 속성 이름을 통해 값의 인스턴스를 수정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!