如何为自定义类创建自定义扩展方法?

时间:2014-01-02 12:07:19

标签: c# combobox extension-methods

我找到了这个类,我用它来为我的组合框生成项目(作为数据源):

 public class ComboBoxItem
{
    public string Text { get; set; }
    public object Value { get; set; }

    public override string ToString()
    {
        return Text;
    }
}

问题在于,只要我需要访问ComboBox的选定值,它就会返回Text,尽管valueText都可见我解析了我的应用,无法访问Value。看图:

ToString()
和这张照片
Value not accessible

我想我需要一个ToInt()函数来将我的类的值作为int返回。我怎样才能实现它?

2 个答案:

答案 0 :(得分:3)

您需要将SelectedItem强制转换为ComboBoxItem,然后访问它的Value属性:

var i = ((ComboBoxItem)sTD_PROVINCEComboBox.SelectedItem).Value;

由于i将包含Value,因此在foreach中,您只需执行以下操作:

foreach(var item in UE2.Cities.Where(x => x.CITY_PROVINCE_ID == i)

更新:

注意Value的{​​{1}}属性是object类型(我假设它是int)。如果是这种情况,上面的foreach部分将不会编译(不允许将int与object进行比较)。假设ComboBoxItem的类型为int,而CITY_PROVINCE_ID存储为boxed int,则需要将i解包为int:

i

答案 1 :(得分:2)

要访问Value属性,您需要将SelectedItem强制转换为正确的类型:

object i = ((ComboBoxItem)sTD_PROVINCEComboBox.SelectedItem).Value;

请注意,我是对象类型。我认为CITY_PROVINCE_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存储为值时才有效。如果Value可能包含其他内容(例如,字符串),则还需要对其进行测试;