【发布时间】:2013-01-18 05:29:57
【问题描述】:
我在Base class 中有一个方法调用(通过反射到 另一个 方法)。
type.InvokeMember(context.Request["MethodName"],
System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance,
null,
this,
new object[] { context, Jobj }); // jObj is dynamic
jObj 参数类型为dynamic(无法更改此类型)。
如果MethodName 字符串值为:“getFinanceDetails”,则调用该方法..
void getFinanceDetails(object contextObj, dynamic obj)
{
//Here I need to do obj["Inv_num"].ToString().Decrpyt() ( my extension method).
//but it goes Bang cause I cant use extension method for dynamic.
//But I cant also send it decrypted from base cause not all values are encrpyrted.
}
但是 - 我确实通过使用(在方法内部)解决了它:
((object) obj["Inv_num"]).ToString().Decrypt();
但我不想每次都转换为 object ,只是为了启用扩展方法。
我可以用 param 类型发送 做些什么来修复它?
我的愿望:
我希望能够做到:obj.ToString().Decrpyt()obj["Inv_num"].ToString().Decrpyt()
编辑
public static string Decrypt(this string obj)
{
Func<string, string> Decrypt = Encryptions.GetDecryptedCode;
return Decrypt(obj);
}
- obj(在这种情况下是
IDictionary<string , object>)。 所以我应该能够读取属性。 (此示例中的 inv_num。
【问题讨论】:
-
你没有给我们足够的信息。您的扩展方法究竟是什么?
obj.ToString()返回什么?["Inv_nim"]的相关性是什么? -
你不能在调用方法之前强制转换 jObj 吗?
new object[] { (YourType)jObj })? -
@JonSkeet 已编辑。谢谢。
-
@RoyiNamir:你为什么期望
ToString()知道返回obj["Inv_num"]? -
@JonSkeet ToString 仅适用于
this string obj的扩展方法。(如果我理解你的问题)
标签: c# .net dynamic reflection