C# 获取到一个类型的Type,如何用作泛型集合的的类型,不创建实例
时间: 2024-10-23 08:13:22 浏览: 17
在C#中,如果你已经获取到了一个类型的 `Type` 对象,想要将其作为泛型集合(如 `List<T>`、`Dictionary<TKey, TValue>` 等)的类型参数而不实际创建实例,可以这样做:
```csharp
// 假设你已经有了 Type 对象,表示 User 类型
Type userType = typeof(User);
// 使用 Type 对象作为泛型类型参数
List<UserType> userList = new List<UserType>();
Dictionary<string, UserType> userData = new Dictionary<string, UserType>();
// 这里 T 就会被替换为你传入的 userType
IEnumerable<UserType> queryableUsers = userList.AsQueryable(); // 如果需要支持LINQ查询
// 泛型方法的例子
void AddToCollection<T>(T item) where T : class {
var collectionOfT = Activator.CreateInstance(typeof(List<>).MakeGenericType(userType));
collectionOfT.Add(item);
}
// 调用方法时传递 User 对象,会自动转换成 UserType
AddToCollection(new User());
```
这里我们用 `typeof` 来获取类型,然后直接在泛型构造中使用,无需实例化该类型。注意 `Activator.CreateInstance` 可以用于创建类型的新实例,但在这个场景下我们不需要创建实例。
阅读全文