Tuple.Create() vs new Tuple

后端 未结 5 1668
孤街浪徒
孤街浪徒 2021-02-02 06:18

Consider the following expressions:

new Tuple(1,2);

Tuple.Create(1,2);

Is there any difference between these two methods of Tup

5条回答
  •  囚心锁ツ
    2021-02-02 07:14

    Personally, I find Tuple.Create() less verbose and easier to read.

    There's no difference, under the hood. The Tuple.Create() overloaded methods are just a bunch of static methods that call the first version you posted:

    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);
        }
    
        ...
    

    I suppose one benefit is that, since you don't have to specify the type with Tuple.Create, you can store anonymous types for which you otherwise wouldn't be able to say what the type is.

    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);
    

    This creates a Tuple with two anonymous types, the first is a new { string Name, DateTime BirthDate } and the second is a new { int Height, string Name }.

    There's still not too terribly much you can do with that, since to pass it to another method, you'd still need to be able to define the "type" of the parameter. So it really comes down to convenience.

提交回复
热议问题