如何将不可空类型转换为可空类型?
是否可以将仅在运行时已知的不可空值类型转换为可空值类型?换句话说:
public Type GetNullableType(Type t)
{
if (t.IsValueType)
{
return typeof(Nullable<t>);
}
else
{
throw new ArgumentException();
}
}
显然 return
行给出了错误。有办法做到这一点吗? Type.MakeGenericType
方法看起来很有前途,但我不知道如何获取表示 Nullable
的未指定通用 Type
对象。有什么想法吗?
Is it possible to convert a non-nullable value type known only at runtime to nullable? In other words:
public Type GetNullableType(Type t)
{
if (t.IsValueType)
{
return typeof(Nullable<t>);
}
else
{
throw new ArgumentException();
}
}
Obviously the return
line gives an error. Is there a way to do this? The Type.MakeGenericType
method seems promising, but I have no idea how to get a unspecified generic Type
object representing Nullable<T>
. Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您想要
typeof(Nullable<>).MakeGenericType(t)
注意:
Nullable<>
不带任何提供的参数是未绑定的泛型类型;对于更复杂的示例,您可以添加逗号以适应 - 即KeyValuePair<,>
,Tuple<,,,>
等。you want
typeof(Nullable<>).MakeGenericType(t)
Note:
Nullable<>
without any supplied arguments is the unbound generic type; for more complex examples, you would add commas to suit - i.e.KeyValuePair<,>
,Tuple<,,,>
etc.你走在正确的轨道上。试试这个:
You're on the right track. Try this:
最简单的解决方案是返回第一个 GenericTypeArguments 的 UnderlyingSystemType。那么在这个例子中,是一个可为空的日期时间吗?作为属性类型返回,我需要将其转换为日期时间类型,以便可以将其添加到数据表中。这应该与 int 一起使用吗?和双? ETC。
The easiest solution is to return the UnderlyingSystemType of the first of the GenericTypeArguments. So in this example, a Nullable Datetime? is returning as the property type and I need to convert it to a Datetime type so it can be added to a DataTable. This should work with int? and double? etc.