Tuple.Create()vs new Tuple
请考虑以下表达式:
new Tuple(1,2); Tuple.Create(1,2);
这两种元组创建方法有什么区别吗? 从我的阅读来看,它似乎比C ++中的对象创建(堆与堆栈)更方便。
嗯,这个问题已经过时了……但我认为我可能会做出建设性的贡献。 从接受的答案:
我想一个好处是,因为您不必使用Tuple.Create指定类型,您可以存储匿名类型,否则您将无法说明类型是什么
结果是这样的:你可以存储匿名类型……
但第一部分:
因为您不必使用Tuple.Create指定类型
并非总是如此。 请考虑以下情形:
interface IAnimal { } class Dog : IAnimal { }
以下内容无法编译:
Tuple myWeirdTuple; myWeirdTuple = Tuple.Create(new Dog());
您必须在Create方法中指定type参数,如下所示:
myWeirdTuple = Tuple.Create(new Dog());
这与调用new Tuple
IMO一样冗长
就个人而言,我发现Tuple.Create()
更简洁,更容易阅读。
引擎盖下没有区别。 Tuple.Create()
重载方法只是调用您发布的第一个版本的一堆静态方法:
public static class Tuple { public static Tuple Create (T1 item1) { return new Tuple (item1); } public static Tuple Create(T1 item1, T2 item2) { return new Tuple(item1, item2); } public static Tuple Create(T1 item1, T2 item2, T3 item3) { return new Tuple(item1, item2, item3); } ...
我想一个好处是,因为您不必使用Tuple.Create
指定类型,您可以存储匿名类型,否则您将无法说明类型是什么。
public class Person { public string Name { get; set; } public int Height { get; set; } public DateTime BirthDate { get; set; } } var people = new List { new Person { Name = "Bob", Height = 72, BirthDate = new DateTime(1984,1,1) }, new Person { Name = "Mary", Height = 64, BirthDate = new DateTime(1980,2,2) } }; var oneAnonList = people.Select(x => new { x.Name, x.BirthDate }); var twoAnonList = people.Select(x => new { x.Height, x.Name }); var myTuple = Tuple.Create(oneAnonList, twoAnonList);
这将创建一个具有两个匿名类型的元组,第一个是new { string Name, DateTime BirthDate }
,第二个是new { int Height, string Name }
。
你仍然没有太多可以做到这一点,因为要将它传递给另一个方法,你仍然需要能够定义参数的“类型”。 所以它真的归结为方便。
Tuple.Create
的好处是你通常可以省略类型参数,例如。 Tuple.Create(1,2)
比new Tuple
更简洁。
如果您尝试从构造函数new Tuple(1,2)
省略类型参数,您将看到错误CS0712“ 无法创建静态类’Tuple的实例’ ”
没有区别。 如果你看一下源代码,那就是做同样的事情。
https://referencesource.microsoft.com/#mscorlib/system/tuple.cs,9124c4bea9ab0199
例如:
Tuple.create(1,2);
打算打电话
上述就是C#学习教程:Tuple.Create()vs new Tuple分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static Tuple Create(T1 item1, T2 item2) { return new Tuple(item1, item2); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/952402.html