回答
您可以添加: new()
约束:
void Foo<T>() where T : class, new() {
T newT = new T();
// do something shiny with newT
}
如果没有约束,那么Activator.CreateInstance<T>
可以帮助(减去编译时检查):
void Foo<T>() {
T newT = Activator.CreateInstance<T>();
// do something shiny with newT
}
如果你的意思你的类型本身,然后可能类似于:
Type itemType = typeof(int);
IList list = (IList)Activator.CreateInstance(
typeof(List<>).MakeGenericType(itemType));
+1可能有趣的是,两个代码示例在执行时都执行相同的操作(即使用Activator类)。你确实要求编译时检查,但你可能想更多地解释你的意思。 – 2010-03-15 05:33:27
@Andrew Hare:有趣的一点!如果生成特定类型的Foo
要跟踪安德鲁的观点; ':new()'约束允许调用代码在您点击“构建”时进行理智检查,但实际上它归结为相同的IL(用于各种实现细节)。如果没有它,它会正常工作,但是如果你打电话给'Foo
- 1. 在C#中使用泛型创建类似类型的实例
- 2. 如何在haskell中创建类的类型实例?
- 3. 如何创建升级类型的类型类实例?
- 4. 如何检查为c#中的某个类型创建多少个实例?
- 5. 创建新的泛型类型实例转换为根类型?
- 6. 如何在Scala中创建投影类型的实例?
- 7. 如何在JavaScript中创建导出类型定义的实例?
- 8. 使用`implicit def`创建类型实例?
- 9. 如何为给定类型创建实例?
- 10. 如何为递归类型创建一个Storable实例?
- 11. IntelliJ:如何在创建通用实例时提示输入类型?
- 12. 如何在Nemerle中创建.NET 4 C#类实例?
- 13. 如何在C++中创建一个类的多个实例
- 14. 如何在C++中只创建一个实例的类
- 15. C#获取用户创建类实例
- 16. 如何在模板函数中创建一个类型的实例? (C++)
- 17. 如何检查类实例是否已创建或为空C#
- 18. 如何创建类的实例并在子类中实现它?
- 19. 如何为幻像类型创建返回幻像类型的实例?
- 20. 创建一个实例如何将它转换为创建的类型
- 21. 实例类型的通用
- 22. 泛型C# - 从静态泛型类创建一个实例
- 23. 如何强制设置类型来创建一个通用实例?
- 24. 在Scala中创建一个泛型类型的实例?
- 25. 在MVC中创建未知类型的实例并使用它
- 26. 在Objective C中创建单例类的另一个实例
- 27. 动态类型实例创建
- 28. 创建类型的实例动态
- 29. 类型定义:创建模块实例
- 30. 创建未知类型的实例
你的意思是没有通用的争论发言:?像新的List <>()? – Elisha 2010-03-15 05:28:15