我有一個很大的(字符串,對象)字典。字典中的值是不同的類型。只有在運行時,我才能在(字符串,整數)或(字符串,字符串)字典中找到值的確切類型。在運行時,我必須將字典中的值分配給它們對應的強類型對象。這是簡化的問題。 我正在嘗試使用一個類型化的類來完成演員。 我有這個代碼不工作:如何使用反射和輸出參數進行通用投射
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));
}
}
裏面的GetTypedValue方法我看到正確的類型obj的值,但是這種方法之外out變量沒有值。請讓我知道我做錯了什麼。
是您意圖是給定一個由Dictionary和String值組合的'Dictionary'來生成兩個字典,一個字符串'和另一個'''填充相應的值匹配類型?那麼從你的示例代碼中,你將得到一個包含「{」123「,」test「}的字典和包含」{「12」,123}「的第二個字典的結果? –
我認爲這是http://stackoverflow.com/questions/569249/methodinfo-invoke-with-out-parameter的副本。您需要將傳遞給method.Invoke的數組存儲在變量中,並從中檢索結果。 –