반응형
변수를 런타임에만 알려진 유형으로 변환 하시겠습니까?
foreach (var filter in filters)
{
var filterType = typeof(Filters);
var method = filterType.GetMethod(filter, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static);
if (method != null)
{
var parameters = method.GetParameters();
Type paramType = parameters[0].ParameterType;
value = (string)method.Invoke(null, new[] { value });
}
}
어떻게 캐스트 value
할 수 paramType
있습니까? value
A는 string
, paramType
아마 기본 유형처럼 될 것이다 int
, string
또는 어쩌면 float
. 변환이 가능하지 않으면 예외를 던지는 것이 멋지다.
사용중인 유형은 모두 IConvertible
. 따라서 ChangeType
.
value = Convert.ChangeType(method.Invoke(null, new[] { value }), paramType);
당신은 역동적으로 갈 수 있습니다. 예를 들면 :
using System;
namespace TypeCaster
{
class Program
{
internal static void Main(string[] args)
{
Parent p = new Parent() { name = "I am the parent", type = "TypeCaster.ChildA" };
dynamic a = Convert.ChangeType(new ChildA(p.name), Type.GetType(p.type));
Console.WriteLine(a.Name);
p.type = "TypeCaster.ChildB";
dynamic b = Convert.ChangeType(new ChildB(p.name), Type.GetType(p.type));
Console.WriteLine(b.Name);
}
}
internal class Parent
{
internal string type { get; set; }
internal string name { get; set; }
internal Parent() { }
}
internal class ChildA : Parent
{
internal ChildA(string name)
{
base.name = name + " in A";
}
public string Name
{
get { return base.name; }
}
}
internal class ChildB : Parent
{
internal ChildB(string name)
{
base.name = name + " in B";
}
public string Name
{
get { return base.name; }
}
}
}
참고 URL : https://stackoverflow.com/questions/4010144/convert-variable-to-type-only-known-at-run-time
반응형
'IT TIP' 카테고리의 다른 글
'O'가 새 라인을 열기 전에 지연됩니까? (0) | 2020.10.19 |
---|---|
장고에서 나만의 컨텍스트 프로세서 만들기 (0) | 2020.10.19 |
-rpath와 -L의 차이점은 무엇입니까? (0) | 2020.10.19 |
nginx 하위 도메인 구성 (0) | 2020.10.19 |
Android 장치가 iBeacon으로 작동 할 수 있습니까? (0) | 2020.10.19 |