如何使泛型方法允许返回null并接受enum
本文关键字:null enum 返回 泛型方法 何使 许返回 | 更新日期: 2023-09-27 18:07:22
如何使下面的扩展工作?我将combobox绑定到enum,在这种情况下,它不会编译,因为它返回null
。
public static T GetSelectedValue<T>(this ComboBox control)
{
if (control.SelectedValue == null)
return null;
return (T)control.SelectedValue;
}
注意:我希望它返回null(而不是默认的(T))。问题是,我必须使用的where表达式是什么?
返回一个可空值,而不是一个普通的T
:
public static T? GetSelectedValue<T>(this ComboBox control) where T : struct
{
if (control.SelectedValue == null)
return null;
return (T)control.SelectedValue;
}
那不可能。值类型不能为空。你的扩展方法返回一个T
的实例,如果这个T是一个枚举(值类型),它的值不能为空。因此,如果不更改返回类型,这样的方法签名就不可能存在。至于将泛型参数约束为enum,这在c#中也是不可能的,但在MSIL中是可能的。
在这种情况下,最常见的方法是在枚举的所有其他成员中定义None
,在这种情况下,在您的逻辑None
== null
。