Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

C#에서 리플렉션을 사용하여 문자열 값으로 데이터 유형이 다른 속성을 설정하는 방법은 무엇입니까?

<시간/>

리플렉션은 관리 코드가 자체 메타데이터를 읽어 어셈블리를 찾을 수 있는 경우입니다. 기본적으로 코드에서 동일한 시스템 내의 다른 코드를 검사할 수 있습니다. C#에서 리플렉션을 사용하면 형식의 인스턴스를 동적으로 만들고 해당 형식을 기존 개체에 바인딩할 수 있습니다. 또한 기존 개체에서 유형을 가져와 속성에 액세스할 수 있습니다. 코드에서 속성을 사용할 때 리플렉션은 모듈, 어셈블리 및 유형을 설명하는 Type의 개체를 제공하므로 액세스를 제공합니다.

Double 유형의 속성이 있고 런타임에 실제로 값을 문자열로 갖고 유형을 변경한 후 속성에 할당한다고 가정해 보겠습니다. Convert.ChangeType()을 사용할 수 있습니다. - 모든 IConvertible 유형에 대한 런타임 정보를 사용하여 표현 형식을 변경할 수 있습니다.

using System;
using System.Reflection;
namespace DemoApplication{
   class Program{
      static void Main(){
         Circle circle = new Circle();
         string value = "6.5";
         PropertyInfo propertyInfo = circle.GetType().GetProperty("Radius");
         propertyInfo.SetValue(circle, Convert.ChangeType(value,
         propertyInfo.PropertyType), null);
         var radius = circle.GetType().GetProperty("Radius").GetValue(circle, null);
         Console.WriteLine($"Radius: {radius}");
         Console.ReadLine();
      }
   }
   class Circle{
      public double Radius { get; set; }
   }
}

출력

Radius: 6.5

위의 예에서 문자열 값 "6.5"가 Convert.ChangeType을 사용하여 실제 typedouble로 변환되고 리플렉션 inruntime을 사용하여 Radius 속성에 할당되는 것을 볼 수 있습니다.