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;
}
编译器会自行确定调用哪个重载,不需要 运行 次检查。
我有一个通用方法。我想检查列表是否为 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;
}
编译器会自行确定调用哪个重载,不需要 运行 次检查。