我有一個方法Base class
它調用(通過反射到另一個方法)。c#動態擴展方法的解決方案?
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();
但我不想每次都施放對象,只是爲了啓用擴展方法。
有什麼我可以用param type發送來解決它嗎?
我的願望:
我希望能夠做到:
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編輯。謝謝。 –