C# 使用类型而不是特定类

C# 使用类型而不是特定类,c#,C#,我有以下代码: if (((Classes.ProductGroup)o).ToString().Contains(comboBox.Text)) return true; else return false; 现在我不想指定部件Classes.ProductGroup。我想让它具有普遍性 如何用类型对象替换零件Classes.ProductGroup Type type = typeof(Classes.ProductGroup); 类似于此: if (((type)o).

我有以下代码:

if (((Classes.ProductGroup)o).ToString().Contains(comboBox.Text)) 
   return true;
else 
   return false;
现在我不想指定部件
Classes.ProductGroup
。我想让它具有普遍性

如何用
类型
对象替换零件
Classes.ProductGroup

Type type = typeof(Classes.ProductGroup);
类似于此:

if (((type)o).ToString().Contains(comboBox.Text)) 
这可能吗

以下是完整的方法代码:

private void FilterPGsinComboBox(object obj)  
{
    if (!Dispatcher.CheckAccess())
    {
        Dispatcher.Invoke(new FilterPGsinComboBoxDelegate(this.FilterPGsinComboBox),obj);
        return;
    }
    Type type = ((Dictionary<ComboBox, Type>)obj).First().Value;
    ComboBox comboBox = ((Dictionary<ComboBox, Type>)obj).First().Key;
    comboBox.IsDropDownOpen = true;
    CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(comboBox.ItemsSource);

    itemsViewOriginal.Filter = ((o) =>
    {
        if (String.IsNullOrEmpty(comboBox.Text)) 
            return true;
        else
        {
            if (((Classes.ProductGroup)o).ToString().Contains(comboBox.Text)) 
                return true;
            else 
                return false;
        }
    });

    itemsViewOriginal.Refresh();
}
private void FilterPGsinComboBox(对象obj)
{
如果(!Dispatcher.CheckAccess())
{
Invoke(新的filterpgsincomboxDelegate(this.filterpgsincomboxDelegate),obj);
返回;
}
类型类型=((字典)obj).First().Value;
ComboBox ComboBox=((字典)obj).First().Key;
comboBox.IsDropDownOpen=true;
CollectionView itemsViewOriginal=(CollectionView)CollectionViewSource.GetDefaultView(comboBox.ItemsSource);
itemsViewOriginal.Filter=((o)=>
{
if(String.IsNullOrEmpty(comboBox.Text))
返回true;
其他的
{
if(((Classes.ProductGroup)o).ToString()包含(comboBox.Text))
返回true;
其他的
返回false;
}
});
itemsViewOriginal.Refresh();
}

您可以使用泛型并构建如下方法

public bool ClassNameContainString<T>(string text) where T : class
{
    var containsString = typeof(T).ToString().Contains(text);

    return containsString;
}

您可以使用泛型并构建如下方法

public bool ClassNameContainString<T>(string text) where T : class
{
    var containsString = typeof(T).ToString().Contains(text);

    return containsString;
}
string-ToString()
方法是在基本
对象
类中定义的。浇铸混凝土类型是多余的

string filter = comboBox.Text;

itemsViewOriginal.Filter = o => String.IsNullOrEmpty(filter) || 
                                o != null && o.ToString().Contains(filter);
string-ToString()
方法是在基本
对象
类中定义的。浇铸混凝土类型是多余的

string filter = comboBox.Text;

itemsViewOriginal.Filter = o => String.IsNullOrEmpty(filter) || 
                                o != null && o.ToString().Contains(filter);

所有对象都有
ToString()
。cast是冗余的
o
,请提供使用@ASh实现的功能-除非该类或其祖先之一已经隐藏了该方法。(但这确实提出了一个问题:为什么有人会这么想)@dns\u nx,为什么有具体类型这么重要?所有对象都有
ToString()
。cast是冗余的
o
,请提供使用@ASh实现的功能-除非该类或其祖先之一已经隐藏了该方法。(但这确实提出了一个问题:为什么有人会这么想)@dns\u nx,为什么拥有具体类型如此重要?我的理解是OP想要做
((T)o).ToString()
。这并不完全清楚,但是从一个对象的强制转换到使用一个类型似乎比从一个固定对象的强制转换到一个可变对象的可能性要小。但是这个函数不是忽略了对象吗?然后我又回到了以前的处境…克里斯,你说得对。我想将
o
转换为给定的类型。我的理解是OP想要执行
((T)o).ToString()
。这并不完全清楚,但是从一个对象的强制转换到使用一个类型似乎比从一个固定对象的强制转换到一个可变对象的可能性要小。但是这个函数不是忽略了对象吗?然后我又回到了以前的处境…克里斯,你说得对。我想将
o
转换为给定类型。