Detailed explanation of tuple instance of new feature of C syntax
- 2021-12-11 18:42:17
- OfStack
1. Tuples (Tuple)
Tuples (Tuple) have existed since 4.0, but tuples also have some disadvantages, such as:
1) Tuple affects the readability of the code because its attribute names are: Item1, Item2.
2) Tuple is not lightweight enough, because it is a reference type (Class), and it is a bit unnecessary to use one type for one variable.
The source code is as follows:
// Summary :
// Provides static methods for creating tuple objects. To browse for this type of .NET Framework Source code, see Reference Source .
public static class Tuple
{
// Return results :
// 1 Tuples whose values (item1) .
public static Tuple<T1> Create<T1>(T1 item1);
// Return results :
// 1 A 2 Tuple whose value (item1, , item2) .
public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2);
}
Provides static methods for creating tuple objects
Note: The Tuple mentioned above is not lightweight enough, which is in a sense or a hypothesis, that is, it assumes that there are many allocation operations.
The tuple (ValueTuple) in C # 7 addresses both of these drawbacks:
1) ValueTuple supports semantic field naming, and can customize the name for every attribute name, such as (int first, int second) tuple = (1, 2).
2) ValueTuple is a value type (Struct).
Note: If the vs report does not have a predefined type ValueTuple < ... > You need to use the nuget command to import: Install-Package System. ValueTuple
The source code is as follows (ValueTuple < ... > Internal principle):
public struct ValueTuple<T1, T2> : IEquatable<ValueTuple<T1, T2>>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable<ValueTuple<T1, T2>>, ITupleInternal
{
public T1 Item1;
public T2 Item2;
int ITupleInternal.Size
{
get
{
return 2;
}
}
public ValueTuple(T1 item1, T2 item2)
{
this.Item1 = item1;
this.Item2 = item2;
}
}
Summary: The appearance of tuples simplifies object-oriented to a certain extent, and some unnecessary or rarely used objects can be returned directly by tuples instead of being returned by types