c# – 如何初始化泛型参数类型T?
发布时间:2020-12-15 03:53:01 所属栏目:百科 来源:网络整理
导读:简单问题: 如果你有一个字符串x,要初始化它,你可以简单地执行以下操作之一: string x = String.Empty; 要么 string x = null; 通用参数T如何? 我试过: void someMethodT(T y){ T x = new T(); ...} 生成错误: 无法创建变量类型“T”的实例,因为它不具有
简单问题:
如果你有一个字符串x,要初始化它,你可以简单地执行以下操作之一: string x = String.Empty; 要么 string x = null; 通用参数T如何? 我试过: void someMethod<T>(T y) { T x = new T(); ... } 生成错误: 解决方法
你有两个选择:
你可以约束T:你可以通过在你的方法中添加:T:new()来做到这一点.现在,您只能使用someMethod类型,该类型具有无参数,默认构造函数(参见Constraints on Type Parameters). 或者使用默认(T).对于引用类型,这将给出null.但是,例如,对于整数值,这将为0(参见default Keyword in Generic Code). 这是一个基本的控制台应用程序,显示了区别: using System; namespace Stackoverflow { class Program { public static T SomeNewMethod<T>() where T : new() { return new T(); } public static T SomeDefaultMethod<T>() where T : new() { return default(T); } struct MyStruct { } class MyClass { } static void Main(string[] args) { RunWithNew(); RunWithDefault(); } private static void RunWithDefault() { MyStruct s = SomeDefaultMethod<MyStruct>(); MyClass c = SomeDefaultMethod<MyClass>(); int i = SomeDefaultMethod<int>(); bool b = SomeDefaultMethod<bool>(); Console.WriteLine("Default"); Output(s,c,i,b); } private static void RunWithNew() { MyStruct s = SomeNewMethod<MyStruct>(); MyClass c = SomeNewMethod<MyClass>(); int i = SomeNewMethod<int>(); bool b = SomeNewMethod<bool>(); Console.WriteLine("New"); Output(s,b); } private static void Output(MyStruct s,MyClass c,int i,bool b) { Console.WriteLine("s: " + s); Console.WriteLine("c: " + c); Console.WriteLine("i: " + i); Console.WriteLine("b: " + b); } } } 它产生以下输出: New s: Stackoverflow.Program+MyStruct c: Stackoverflow.Program+MyClass i: 0 b: False Default s: Stackoverflow.Program+MyStruct c: i: 0 b: False (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |