gpt4 book ai didi

C# 动态和扩展方法解决方案?

转载 作者:行者123 更新时间:2023-12-02 12:28:17 25 4
gpt4 key购买 nike

我在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 ,只是为了启用扩展方法。

我可以通过参数类型发送来解决这个问题吗?

我的愿望:

我希望能够做到: 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。

最佳答案

可能不完全是您正在寻找的语法,但您可以将扩展方法作为动态对象上的简单静态方法调用:

void getFinanceDetails(object contextObj, dynamic obj)
{
var decryptedValue = MyExtensions.Decrypt(obj);
}

这显然假设在运行时 obj 是您的扩展方法所操作的正确类型。在您的问题中,您显示了一些 obj["Inv_num"] ,就好像 obj 是一个复杂类型,其属性名为 Inv_num ,其类型为字符串。因此,您可能需要调整正确类型的调用:

var decryptedValue = MyExtensions.Decrypt(obj["Inv_num"]);

关于C# 动态和扩展方法解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14671096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com