C# 如何为自定义类创建自定义扩展方法?
我找到了这个类,并使用它为我的组合框(作为数据源)生成项: 问题是,每当我需要访问组合框的选定值时,它总是返回C# 如何为自定义类创建自定义扩展方法?,c#,combobox,extension-methods,C#,Combobox,Extension Methods,我找到了这个类,并使用它为我的组合框(作为数据源)生成项: 问题是,每当我需要访问组合框的选定值时,它总是返回文本,尽管解析应用程序时值和文本都可见,但我无法访问值。如图所示: 这张图片: 我想我需要一个ToInt()函数以int的形式返回类的值。如何实现它?您需要将SelectedItem强制转换为ComboBoxItem,然后访问它的Value属性: var i = ((ComboBoxItem)sTD_PROVINCEComboBox.SelectedItem).Value; 使用该
文本
,尽管解析应用程序时值
和文本
都可见,但我无法访问值
。如图所示:
这张图片:
我想我需要一个
ToInt()
函数以int的形式返回类的值。如何实现它?您需要将SelectedItem强制转换为ComboBoxItem,然后访问它的Value属性:
var i = ((ComboBoxItem)sTD_PROVINCEComboBox.SelectedItem).Value;
使用该i
将包含值
,因此在foreach
中,您可以简单地执行以下操作:
foreach(var item in UE2.Cities.Where(x => x.CITY_PROVINCE_ID == i)
更新:
请注意,comboxItem
的Value
属性属于object类型(我假设它是int)。如果是这种情况,上述foreach部分将不会编译(不允许将int与object进行比较)。假设CITY\u PROVINCE\u ID
类型为int,并且i
存储装箱的int,则需要将i
解装箱返回int:
foreach(var item in UE2.Cities.Where(x => x.CITY_PROVINCE_ID == (int)i)
要访问
值
属性,需要将SelectedItem强制转换为正确的类型:
object i = ((ComboBoxItem)sTD_PROVINCEComboBox.SelectedItem).Value;
请注意,我属于object类型。我假设城市\省\ ID
的类型为int
。您无法测试对象和int的引用相等性,因此这样的语句甚至无法编译:
foreach(var item in UE2.Cities.Where(x => x.CITY_PROVINCE_ID == i)
错误消息将是“运算符”==“不能应用于“object”和“int”类型的操作数
您可以改为将对象强制转换回int:
object o = ((ComboBoxItem)sTD_PROVINCEComboBox.SelectedItem).Value;
int i = (int)o;
显然,只有将
int
s存储为值时,这才有效。如果Value
可能包含其他内容(比如字符串),那么您也需要针对该内容进行测试 这仍然不起作用,因为您正在测试两个对象(装箱整数)之间的引用相等性。也就是说,如果城市\省\ ID为object类型。不过我怀疑它是int类型的,在这种情况下,它甚至无法编译。@jeroenh你说得对,我没有注意到Value
属性是一个对象而不是int。要修正我的答案,请用thx进行更正。这个问题根本不需要扩展方法。谢谢jeorenh。我没有犯那个错误,我认为你的解决方案也有效。
object o = ((ComboBoxItem)sTD_PROVINCEComboBox.SelectedItem).Value;
int i = (int)o;