Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为自定义类创建自定义扩展方法?_C#_Combobox_Extension Methods - Fatal编程技术网

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;