C# 如何传递与参数类型相同的泛型类型?

C# 如何传递与参数类型相同的泛型类型?,c#,windows-8,C#,Windows 8,我正在尝试这样做: public static void ShowTaskPane(UserControl type) { var item = set.OfType<typeof(type)>().FirstOrDefault(); } publicstaticvoidshowtaskpane(用户控件类型) { var item=set.OfType().FirstOrDe

我正在尝试这样做:

public static void ShowTaskPane(UserControl type)
        {            
                var item = set.OfType<typeof(type)>().FirstOrDefault();
     }
publicstaticvoidshowtaskpane(用户控件类型)
{            
var item=set.OfType().FirstOrDefault();
}

但这不起作用,我想选择类型或传递参数的对象。方法签名,如果需要,我可以更改它,但建议我如何操作?

您可以将您的方法定义为:

public static void ShowTaskPane<T>()
{
    var item = set.OfType<T>().FirstOrDefault();
}
public static void ShowTaskPane()
{
var item=set.OfType().FirstOrDefault();
}
然后像这样称呼它:

ShowTaskPane<UserControl>();
var item = ShowTaskPane<UserControl>();
ShowTaskPane();
或者,如果假定您的方法返回控件,则:

public T ShowTaskPane<T>()
{
    return set.OfType<T>().FirstOrDefault();
}
public T ShowTaskPane()
{
返回set.OfType().FirstOrDefault();
}
可以这样说:

ShowTaskPane<UserControl>();
var item = ShowTaskPane<UserControl>();
var item=ShowTaskPane();
评论:我是否可以将T的类型限制为 UserControl的子类型

可以指定约束,如下所示:

public T ShowTaskPane<T>() where T : UserControl
{
    return set.OfType<T>().FirstOrDefault();
}
public T ShowTaskPane(),其中T:UserControl
{
返回set.OfType().FirstOrDefault();
}

谢谢,但是我是否可以将T类型限制为UserControl的子类型?