gpt4 book ai didi

c# - 使用可能不存在的反射设置属性

转载 作者:太空宇宙 更新时间:2023-11-03 12:46:16 25 4
gpt4 key购买 nike

当尝试在只有 .Net 4.0 的系统上设置 .Net 4.5 中添加的属性时,您会得到 MissingMemberException ( https://msdn.microsoft.com/en-us/library/system.missingmemberexception(v=vs.110).aspx )。但是只有在使用反射的时候才能捕捉到这个,否则就是无法捕捉到的JIT异常。 ( Why is it not possible to catch MissingMethodException? )

所以我改变了我的代码:

client.DeliveryFormat = SmtpDeliveryFormat.International;

var p = client.GetType().GetProperty("DeliveryFormat");
if(p!=null)
p.SetValue(client, SmtpDeliveryFormat.International);

但是现在我得到一个 TypeLoadException 而不是关于 SmtpDeliveryFormat 的抛出,因为这个枚举也只在 4.5 中添加。

我该如何解决第二个问题?

最佳答案

一个选择是一路反射(reflection):

var prop = client.GetType().GetProperty("DeliveryFormat");
if (prop != null) {
var enumType = typeof (SmtpClient).Assembly.GetType("System.Net.Mail.SmtpDeliveryFormat");
prop.SetValue(client, Enum.Parse(enumType, "International", null));
}

在您的案例中,这不应该抛出丢失的方法或类型加载异常。

关于c# - 使用可能不存在的反射设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37208005/

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