gpt4 book ai didi

c# - 通过反射将 T 包装在 Nullable

转载 作者:太空狗 更新时间:2023-10-29 22:51:57 25 4
gpt4 key购买 nike

所以我有一个自定义通用模型联编程序,它处理 T 和 Nullable
但是我通过反射自动创建绑定(bind)。我在整个应用程序域中搜索带有特定属性标记的枚举,我想像这样绑定(bind)这些枚举:

  AppDomain
.CurrentDomain
.GetAssemblies()
.SelectMany(asm => asm.GetTypes())
.Where(
t =>
t.IsEnum &&
t.IsDefined(commandAttributeType, true) &&
!ModelBinders.Binders.ContainsKey(t))
.ToList()
.ForEach(t =>
{
ModelBinders.Binders.Add(t, new CommandModelBinder(t));
//the nullable version should go here
});

但这就是陷阱。我无法将 Nullable 绑定(bind)到 CommandModelBinder。
我在考虑运行时代码生成,但我从来没有这样做过,也许市场上还有其他选择。有实现此目标的想法吗?

谢谢,
彼得

最佳答案

如果你有T , 你可以创建 Nullable<T>使用 Type.MakeGenericType :

ModelBinders.Binders.Add(t, new CommandModelBinder(t));
var n = typeof(Nullable<>).MakeGenericType(t);
ModelBinders.Binders.Add(n, new CommandModelBinder(n));

我不知道你的CommandModelBinder工作以及适当的构造函数参数是什么,您可能需要

ModelBinders.Binders.Add(n, new CommandModelBinder(t));

相反。

备注:MakeGenericType如果使用错误的类型调用,将抛出异常。我没有添加错误检查,因为您已经在过滤以仅获取有意义的类型。如果您更改过滤条件,请记住这一点。

关于c# - 通过反射将 T 包装在 Nullable<T> 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17808889/

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