Osobiście uważam Tuple.Create()
mniej gadatliwy i łatwiejsze do odczytania.
Nie ma różnicy, pod maską. W Tuple.Create()
przeciążone metody to tylko kilka z metod statycznych, które nazywają się pierwsza wersja ty Wysłany:
public static class Tuple
{
public static Tuple<T1> Create<T1>(T1 item1) {
return new Tuple<T1>(item1);
}
public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2) {
return new Tuple<T1, T2>(item1, item2);
}
public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3) {
return new Tuple<T1, T2, T3>(item1, item2, item3);
}
...
Przypuszczam jedną korzyścią jest to, że ponieważ nie trzeba określić typ z Tuple.Create
można zapisać anonimowy typy, dla których inaczej nie byłbyś w stanie powiedzieć, jaki jest typ.
public class Person
{
public string Name { get; set; }
public int Height { get; set; }
public DateTime BirthDate { get; set; }
}
var people = new List<Person>
{
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);
Stwarza to krotka z dwóch anonimowych typów, pierwszy jest new { string Name, DateTime BirthDate }
a drugi jest new { int Height, string Name }
.
Nadal nie jest zbyt wiele, co można z tym zrobić, ponieważ aby przekazać go innej metodzie, nadal trzeba będzie zdefiniować "typ" parametru. Tak naprawdę sprowadza się to do wygody.
'Tuple t1 = new Tuple (1,2);' <----- to jest powód, dla którego C# ma słowo kluczowe "var". –