• c# ValueTuple


    为什么我们需要 ValueTuple?

    • Tuple 是引用类型,但 ValueTuple 是值类型。
    • Tuple 不提供命名约定,但 ValueTuple 提供了强大的命名约定。
    • 在 Tuples 中,您不能创建零分量的元组,但在 ValueTuple 中,您可以创建零元素的元组。
    • ValueTuple 的性能优于 Tuple。 因为 ValueTuple 提供了一种轻量级的机制,用于从现有方法返回多个值。 并且 ValueTuple 的语法比 Tuples 更优化。
    • ValueTuple 通过使用解构和 _ 关键字为访问值元组的元素提供了更大的灵活性。 但是 Tuple 不能提供解构的概念和 _ 关键字。
    • 在 ValueTuple 中,item1 和 item2 等成员是字段。 但在元组中,它们是属性。
    • 在 ValueTuple 中,字段是可变的。 但是在元组中,字段是只读的。

    Creating a ValueTuple

    • Using Constructor

      // Constructor for creating one element
      ValueTuple(T1)
      // Constructor for creating two elements
      ValueTuple(T1, T2)
      // Constructor for creating eight elements
      ValueTuple(T1, T2, T3, T4, T5, T6, T7, TRest) /


    Sample
    
    using System;
     
    class GFG {
     
        // Main method
        static public void Main()
        {
     
            // ValueTuple with one element
            ValueTuple ValTpl1 = new ValueTuple(345678);
     
            // ValueTuple with three elements
            ValueTuple ValTpl2 = new ValueTuple("C#", "Java", 586);
     
            // ValueTuple with eight elements
            ValueTuple > ValTpl3 = new ValueTuple >(45, 67, 65, 34, 34,
                                                                        34, 23, new ValueTuple(90));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    • Using Create Method

    // Method for creating an empty value tuple
    Create();
    // Method for creating 1-ValueTuple
    Create(T1)
    // Method for creating 8-ValueTuple
    Create(T1, T2, T3, T4, T5, T6, T7, T8)


    Sample

    using System;
     
    public class GFG {
     
        // Main method
        static public void Main()
        {
     
            // Creating 0-ValueTuple
            // Using Create() Method
            var Valtpl1 = ValueTuple.Create();
     
            // Creating 3-ValueTuple
            // Using Create(T1, T2, T3) Method
            var Valtpl2 = ValueTuple.Create(12, 30, 40, 50);
     
            // Creating 8-ValueTuple
            // Using Create(T1, T2, T3, T4, T5, T6, T7, T8) Method
            var Valtpl3 = ValueTuple.Create(34, "GeeksforGeeks",
                          'g', 'f', 'g', 56.78, 4323, "geeks");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • Using parenthesis()

    named member

    using System;
     
    public class GFG {
        static public void Main()
        {
            (int age, string Aname, string Lang) author = (23, "Sonia", "C#");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    using System;
     
    public class GFG {
     
        static public void Main()
        {
            var author = (age : 23, Aname
                          : "Sonia", Lang
                          : "C#");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    UnNamed Member

    using System;
     
    public class GFG {
        static public void Main()
        {
            var author = (20, "Siya", "Ruby");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    using System;
     
    public class GFG {
        static public void Main()
        {
            ValueTuple author = (20, "Siya", "Ruby");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Accessing ValueTuple members

    • Accessing unnamed members
    using System;
     
    public class GFG {
     
        // Main Method
        static public void Main()
        {
     
            // ValueTuple with three elements
            var author = (20, "Siya", "Ruby");
     
            // Accessing the ValueTuple
            // Using default Item property
            Console.WriteLine("Age:" + author.Item1);
            Console.WriteLine("Name:" + author.Item2);
            Console.WriteLine("Language:" + author.Item3);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • Accessing Named members:
    using System;
     
    public class GFG {
     
        // Main Method
        static public void Main()
        {
     
            // ValueTuple with three elements
            var library = (Book_id : 2340, Author_name
                           : "Arundhati Roy", Book_name
                           : "The God of Small Things");
     
            // Accessing the ValueTuple
            // according to their names
            Console.WriteLine("Book Id: {0}", library.Book_id);
            Console.WriteLine("Author Name: {0}", library.Author_name);
            Console.WriteLine("Book Name: {0}", library.Book_name);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    Returning ValueTuple

    using System;
     
    public class GFG {
     
        // This method returns the tourist details
        static(int, string, string) TouristDetails()
        {
            return (384645, "Sophite", "USA");
        }
     
        // Main method
        static public void Main()
        {
     
            // Store the data provided by the TouristDetails method
            var(Tourist_Id, Tourist_Name, Country) = TouristDetails();
     
            // Display data
            Console.WriteLine("Tourist Details: ");
            Console.WriteLine($ "Tourist Id: {Tourist_Id}");
            Console.WriteLine($ "Tourist Name: {Tourist_Name}");
            Console.WriteLine($ "Country: {Country}");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    mybatis 14: 多对一关联查询
    Argo 推出的无压力部署选项
    计算机网络学习笔记(二)---运输层,应用层
    使用 Typhoeus 和 Ruby 编写的爬虫程序
    储能领域 / 通讯协议 / 技术栈 等专有名字集锦——主要收集一些储能领域的专有名词,以及相关的名词
    Mysql 如何模糊匹配后匹配优化
    Nginx 面试 40 连问,顶不顶得住~~
    Splunk iowait 报警的解决
    36二叉树-翻转二叉树
    冒泡排序(C语言详解)
  • 原文地址:https://blog.csdn.net/a_codecat/article/details/127720252