c#元组

Tuple是C# 4.0时出的新特性,.Net Framework 4.0以上版本可用。ValueTuple是C# 7.0的新特性之一,.Net Framework 4.7以上版本可用。

一、Tuple

.Net Framework元组仅支持1到7个元组元素,如果有8个元素或者更多,需要使用Tuple的嵌套和Rest属性去实现。

1.创建元组

var testTuple6 = new Tuple<int, int, int, int, int, int>(1, 2, 3, 4, 5, 6);
Console.WriteLine($"Item 1: {testTuple6.Item1}, Item 6: {testTuple6.Item6}");

2.从方法返回多个值

 

     static Tuple<string, int, uint> GetStudentInfo(string name)
        {
            return new Tuple<string, int, uint>("Bob", 28, 175);
        }
        static void RunTest()
        {
            var studentInfo = GetStudentInfo("Bob");
            Console.WriteLine($"Student Information: Name [{studentInfo.Item1}], Age [{studentInfo.Item2}], Height [{studentInfo.Item3}]");
        }

 

  • 访问元素的时候只能通过ItemX去访问,使用前需要明确元素顺序,属性名字没有实际意义,不方便记忆;
  • 最多有八个元素,要想更多只能通过最后一个元素进行嵌套扩展;
  • Tuple是一个引用类型,不像其它的简单类型一样是值类型,它在堆上分配空间,在CPU密集操作时可能有太多的创建和分配工作。

 

二、ValueTuple

1.创建元组

 

var testTuple6 = new ValueTuple<int, int, int, int, int, int>(1, 2, 3, 4, 5, 6);

 

2.从方法返回多个值

 

static (string name, int age, uint height) GetStudentInfo1(string name)
{
    return ("Bob", 28, 175);
}
static void RunTest1()
{
    var studentInfo = GetStudentInfo1("Bob");
    Console.WriteLine($"Student Information: Name [{studentInfo.name}], Age [{studentInfo.age}], Height [{studentInfo.height}]");
}

 

3.解构ValueTuple

 

static (string name, int age, uint height) GetStudentInfo1(string name)
{
    return ("Bob", 28, 175);
}

static void RunTest1()
{
    var (name, age, height) = GetStudentInfo1("Bob");
    Console.WriteLine($"Student Information: Name [{name}], Age [{age}], Height [{height}]");

    (var name1, var age1, var height1) = GetStudentInfo1("Bob");
    Console.WriteLine($"Student Information: Name [{name1}], Age [{age1}], Height [{height1}]");

    var (_, age2, _) = GetStudentInfo1("Bob");//用_代替不想要的数据
    Console.WriteLine($"Student Information: Age [{age2}]");
}

 

posted @ 2021-09-13 21:29  HelloWorld庄先生  阅读(520)  评论(0编辑  收藏  举报