如何进行以下扩展工作?我将ComboBoxe绑定到枚举,在这种情况下它不会编译,因为它返回null
。
public static T GetSelectedValue<T>(this ComboBox control)
{
if (control.SelectedValue == null)
return null;
return (T)control.SelectedValue;
}
注意:我希望它返回null(而不是默认值(T))。 问题是,我必须使用哪种表达方式?
答案 0 :(得分:6)
返回一个可空的而不是普通的T
:
public static T? GetSelectedValue<T>(this ComboBox control) where T : struct
{
if (control.SelectedValue == null)
return null;
return (T)control.SelectedValue;
}
答案 1 :(得分:5)
那是不可能的。值类型不能为null。您的扩展方法返回T
的实例,如果此T是枚举(值类型),则其值不能为null。因此,在不更改返回类型的情况下,此类方法签名根本不存在。至于将泛型参数约束为枚举,这在C#中也是不可能的,但在MSIL中是可能的。 Jon有blogged about it。
答案 2 :(得分:1)
在这种情况下,最常见的方法是枚举定义None
的所有其他成员,在这种情况下,在您的逻辑None
== null
中。