c# - 如何更改通用特定 class

c# - How to change the generic specific class

我有一个通用方法。我想检查列表是否为 Users 类型。如果是,请将列表更改为:

List<Users>

这可能吗?

public void setList<T>(List<T> list)
{
    List<Users> listUsers;
    if (list is Users)
    {
        //listUsers = list;
    }

    dataGrid1.ItemsSource = list;
}

您无法在 运行 时更改类型。但是您可以将类型设置为 object 或基础 class 或两种类型共有的接口。那应该允许你做你想做的事(尽管你还没有很具体地说明你想要什么)。

您不能从 List<T> 转换为 List<Users>,因为 List<T> 不支持关于类型参数的协变(有关此主题的更多信息,请参阅示例Covariance and Contravariance in Generics)。但是,您始终可以强制转换为接口。所以如果 IList<Users> 是你可以接受的(我认为应该是),那么你可以使用这个:

public void setList<T>(List<T> list)
{
    IList<Users> listUsers;
    if (typeof(T) == typeof(Users))
    {
        listUsers = (IList<Users>)list;
    }

    dataGrid1.ItemsSource = list;
}

作为替代方案,您可以在通用重载的同时使用非通用重载:

public void setList(List<Users> list)
{
    // processing specific for List<Users>

    dataGrid1.ItemsSource = list;
}

编译器会自行确定调用哪个重载,不需要 运行 次检查。