>  기사  >  백엔드 개발  >  C#에서 개체 속성 이름을 통해 값의 인스턴스를 수정하는 방법

C#에서 개체 속성 이름을 통해 값의 인스턴스를 수정하는 방법

黄舟
黄舟원래의
2017-09-18 11:01:293596검색

출처: 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 허용 유형을 변환할 때 오류가 보고되지 않습니다.
기본 판단 검증을 추가하면 코드가 더욱 완성됩니다.


rreee

위 내용은 C#에서 개체 속성 이름을 통해 값의 인스턴스를 수정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.