• C# 元组


    Tuple类的使用

      元组就是将一组松散的对象简单地组合在一起。

      元组比数组灵活性略强,数组中元素类型是统一的,而元组使用的是泛型参数,每个元素类型相互独立。

      元组不同于类和结构,类和结构是高度聚合的数据类型,其中要实现各种复杂的功能;元组还是一系列单一对象的简单组合,不存在复杂操作。

      元组中将所有元素分配给Item*属性,其中*表示序号,例如Item1、Item2等,取决于元素个数,可容纳1~8个。

      创建元组实例:

    (1)Tuple<int,long,char> t = new Tuple<int,long,char>(1000,20000L,'p');

    (2)var k = Tuple.Create<byte,string>(255,"full"); // Item1:255,Item2:"full"

    ValueTuple

      ValueTuple是值类型,不需要分配堆内存,效率更优于Tuple,推荐使用。

        ValueTuple<bool, byte> t2 = ValueTuple.Create<bool, byte>(false, 100);
        StringBuilder strbd = new StringBuilder();
        strbd.AppendFormat("{0}:{1} = {2}
    ", nameof(t2.Item1), t2.Item1.GetType().Name, t2.Item1);
        strbd.AppendFormat("{0}:{1} = {2}
    ", nameof(t2.Item2), t2.Item2.GetType().Name, t2.Item2);
        // 修改 Item2
        t2.Item2 = 210;
        // 再次输出
        strbd.AppendFormat("修改后,{0} = {1}", nameof(t2.Item2), t2.Item2);
        Console.WriteLine(strbd);
    

    结果:

        Item1:Boolean = False
        Item2:Byte = 100
        修改后,Item2 = 210
    

      ValueTuple结构得到C#语法支持,可用更简洁的语法声明。

    (1)var a = (100,(byte)15,true);

    (2)ValueTuple<string,string> b = ("aaa","bbb");

    (3)(long,uint)f = (1234534343L,7888);

    重命名元组字段

    (1)(int ID,string Title,string Body) v =(1,"aa","bb");可直接使用自定义字段名v.ID = 1

    (2)var w = (Count:999,Symb:'*')

    将元组解构为变量

      如果声明元组时,不使用变量名,则编译器会将元组中的各个字段自动解构为单独的变量。

       (long BookID, string BookName, string Author) = (10000031L, "Sample Book", "Tommy");
       Console.WriteLine($"编号:{BookID}
    书名:{BookName}
    作者:{Author}");
    

    将元组作为返回值

        static (string, int, string) GetData()
        {
            return ("Test 1", 35, "Test 2");
        }
    
        static (int Number1, int Number2) GetNumbers()
        {
            Random rand = new Random();
            return (rand.Next(0, 1000), rand.Next(0, 1000));
        }
    
        // 不对字段进行重命名
        var k = GetData();
        Console.WriteLine("未对字段重命名:");
        Console.WriteLine("Item1 = {0}, Item2 = {1}, Item3 = {2}", k.Item1, k.Item2, k.Item3);
    
        // 重命名元组中的字段
        var (Mark1, Count, Mark2) = GetData();
        Console.WriteLine("
    对字段进行重命名:");
        Console.WriteLine($"{nameof(Mark1)} = {Mark1}, {nameof(Count)} = {Count}, {nameof(Mark2)} = {Mark2}");
    
        // 获取带命名字段的返回值
        var d = GetNumbers();
        Console.WriteLine("
    返回带重命名字段的元组:");
        Console.WriteLine($"{nameof(d.Number1)} = {d.Number1}, {nameof(d.Number2)} = {d.Number2}");
    
        Console.Read();
    

    本文来自博客园,作者:一纸年华,转载请注明原文链接:https://www.cnblogs.com/nullcodeworld/p/15234935.html

  • 相关阅读:
    Browsersync 浏览器自动刷新
    react学习历程问题记载(二)
    react学习历程问题记载(一)
    LessJs笔记
    toFixed的使用
    react+ts封装AntdUI的日期选择框之月份选择器DatePicker.month
    elementUI实现日期框选中项文本高亮
    react+lib-flexible适配浏览器宽度配置
    vue+lib-flexible实现大小屏幕,超大屏幕的适配展示。
    div+伪元素实现太极图
  • 原文地址:https://www.cnblogs.com/nullcodeworld/p/15234935.html
Copyright © 2020-2023  润新知