큰 사전 (문자열, 개체)이 있습니다. 사전의 값은 다른 유형입니다. 런타임에만 (string, int) 또는 (string, string) 사전에 정확한 값 유형을 찾을 수 있습니다. 런타임에 사전에 값을 해당 강하게 입력 된 객체에 할당해야합니다. 이것은 단순화 된 문제입니다. 캐스트를 수행하는 입력 된 클래스를 사용하려고합니다. 나는 작동하지 않는 코드가 있습니다반사 및 출력 매개 변수를 사용하여 일반 캐스트를 수행하는 방법
static void Main(string[] args)
{
var values = new Dictionary<string, object>
{
{ "123", "test"},
{"12", 123}
};
var result = new Dictionary<string, object>();
Type dict = values.GetType();
Type typedCast = typeof(TypedClass<>).MakeGenericType(new [] { dict });
MethodInfo method = typedCast.GetMethod("GetTypedValue",
BindingFlags.Static | BindingFlags.Public,
null,
new[]
{
typeof(object),
typeof(object).MakeByRefType()
},
null);
method.Invoke(null, new[]{values, result});
}
public class TypedClass<T>
{
public static void GetTypedValue(object value, out object obj)
{
obj = (T)Convert.ChangeType(value, typeof(T));
}
}
을 내가 올바른 유형과 OBJ 값을 참조 GetTypedValue 방법 내부를하지만,이 방법 밖에 밖으로 변수에 값이 없습니다. 내가 뭘 잘못하고 있는지 알려줘.
'string'과'int' 값의 조합으로 채워진'Dictionary'를 주어, 하나의'과 두 개의 사전을 만들어 내고 해당 값으로 채워지는 다른 '' 유형별로 일치합니까? 그래서 당신의 샘플 코드에서'{ "123", "test"}'와'{ "12", 123}'을 포함하는 두 번째 사전을 포함하는 하나의 사전 결과를 얻게됩니까? –
나는 이것이 http://stackoverflow.com/questions/569249/methodinfo-invoke-with-out-parameter의 사본이라고 생각한다. method.Invoke에 전달 된 배열을 변수에 저장하고 그 결과를 검색해야합니다. –