C# Tuple<T1,T2....T>元组的使用

1)

先说组元:一个数据结构,由通过逗号分割的,用于传递给一个程序或者操作系统的一系列值的组合。

NET Framework 直接支持一至七元素的元组

Tuple<T1>

Tuple<T1, T2>

Tuple<T1, T2, T3>

Tuple<T1, T2, T3, T4>

Tuple<T1, T2, T3, T4, T5>

Tuple<T1, T2, T3, T4, T5, T6>

Tuple<T1, T2, T3, T4, T5, T6, T7>

此外,您可以通过嵌套的元组中的对象创建八个或多个元素的元组在Rest 属性中的Tuple<T1,
T2, T3, T4, T5, T6, T7, TRest>
对象。

简单的示例:

            //一个元素的元组
            Tuple<int> test = new Tuple<int>(34);

            //两个元素的元组 1<n<8
            Tuple<string, int> test2 = Tuple.Create<string, int>("str", 2);
            Tuple<int, int> test2_1 = new Tuple<int, int>(2,2);

            //8个元素的元组(注意,Tuple<类型...>: 基本"类型"最多7个, 第八个元素类型必须也为元组)
            Tuple<int, int, int, int, int, int, int, Tuple<int>> test3 =
            new Tuple<int, int, int, int, int, int, int, Tuple<int>>(1, 2, 3, 4, 5, 6, 7, new Tuple<int>(8));

            //也可以这样
            Tuple<int, int, Tuple<int, int>> test_i_i_Tii = new Tuple<int, int, Tuple<int, int>>(1,1,new Tuple<int,int>(2,3));

            Console.WriteLine(test.Item1);
            Console.WriteLine(test2.Item1 + test2.Item2);
            Console.WriteLine(test2_1.Item1 + test2_1.Item2);
            Console.WriteLine(test3.Item1 + test3.Item2 + test3.Item3 + test3.Item4 + test3.Item5 + test3.Item6 + test3.Item7 + test3.Rest.Item1);

结果:

2)多个返回值问题

一般我们都是用out关键字(相比其他语言,如golang,out关键字还是稍微有点麻烦),此时我们可以使用元组实现:

namespace TupleDemo
{
    class Program
    {
        static void Main(string[] args)
        {

            //使用out拿到多个返回值
            string outparam = "";
            int returnvalue = FunOutParamDemo(out outparam);
            Console.WriteLine(returnvalue + "    " + outparam);

            //使用元组拿到多个返回值
            Tuple<int, string> r = FunTupleParamDemo();
            Console.WriteLine(r.Item1 + "    " + r.Item2);

            Console.Read();
        }
        /// <summary>
        /// out关键字,实现返回两个返回值
        /// </summary>
        /// <param name="o"></param>
        /// <returns></returns>
        public static int FunOutParamDemo(out string o)
        {
            o = "returnValue";
            return 10;
        }

        /// <summary>
        /// 使用元组实现【间接】返回【两个】返回值
        /// </summary>
        /// <returns></returns>
        public static Tuple<int, string> FunTupleParamDemo() {
            return new Tuple<int, string>(10, "returnValue");
        }
    }
}

运行结果:

时间: 2024-10-12 23:05:02

C# Tuple<T1,T2....T>元组的使用的相关文章

详解C# Tuple VS ValueTuple(元组类 VS 值元组)

C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化:ValueTuple.这里利用详尽的例子详解Tuple VS ValueTuple(元组类VS值元组),10分钟让你更了解ValueTuple的好处和用法. 如果您对Tuple足够了解,可以直接跳过章节"回顾Tuple",直达章节"ValueTuple详解",查看值元组的炫丽用法. 回顾Tuple Tuple是C# 4.0时出的新特性,.Net Framework 4.0以上版本可用. 元组是一种

&quot;SELECT * FROM T1,T2&quot; 与 join in 的关系

T1 于 T2  的表 如下: ------------------------------------------------------------------------------------------ SELECT * FROM T1,T2  (接过为2两表的笛卡儿积) 如下 ----------------------------------------------------------------------------------------------- SELECT *

Action&lt;T1, T2&gt;委托

封装包含两个参数的方法委托,没有返回值. 语法 public delegate void Action<in T1, in T2>( T1 arg1, T2 arg2 ) 类型参数 in T1:委托封装方法的第一个参数类型,此类型参数逆变. 用法 可以使用Action<T1, T2>委托以参数形式传递方法,而不用自定义委托.封装的方法必须与此委托的方法签名一致.也就是说,封装的方法也要有两个参数,没有返回值. 下面显式声明了一个名为ConcatStrings的委托.然后,它将两个方

020给定两个二叉树T1,T2判断T1是否是T2的子树(keep it up)

给定两个二叉树T1,T2判断T1是否是T2的子树 首先在T2中查找T1的根节点,如果找不到, 则T1不是T2的子树,如果能找到,我们可以 遍历T1,检查T1的每个结点是否对应的存在T2 中. 代码: struct TreeNode { int data; TreeNode* leftChild; TreeNode* rightChild; }; bool isExited(const TreeNode* vRoot1, const TreeNode *vRoot2, TreeNode* vRes

DateTime.Compare(t1,t2)比较两个日期大小

DateTime.Compare(t1,t2)比较两个日期大小,排前面的小,排在后面的大,比如:2011-2-1就小于2012-3-2返回值小于零:  t1 小于 t2. 返回值等于零 : t1 等于 t2. 返回值大于零:  t1 大于 t2. 如: [c-sharp] view plain copy using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace C

C#中的Expression&lt;Func&lt;T1,T2&gt;&gt; expression 怎么理解

有的时候在使用一些C#方法的时候会看到要求输入Expression<Func<T1,T2>> expression 这个参数 怎么去理解呢? Func是表示的委托类型,接受T1类型的参数,然后返回T2类型的值, 而Expression代表的是表达式类型 不妨这么去理解Expression<Func<int,double>> expression Expression是一个表达式,那么就写成lambda表达式 这么这个Lambda表达式接受int参数,然后返回

noi题库(noi.openjudge.cn) 3.9数据结构之C++STL T1——T2

T1 1806:词典 描述 你旅游到了一个国外的城市.那里的人们说的外国语言你不能理解.不过幸运的是,你有一本词典可以帮助你. 输入首先输入一个词典,词典中包含不超过100000个词条,每个词条占据一行.每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔开.而且在词典中不会有某个外语单词出现超过两次.词典之后是一个空行,然后给出一个由外语单词组成的文档,文档不超过100000行,而且每行只包括一个外语单词.输入中出现单词只包括小写字母,而且长度不会超过10.输出在输出中,你需要把

有三个线程T1 T2 T3,如何保证他们按顺序执行-转载

T3先执行,在T3的run中,调用t2.join,让t2执行完成后再执行t3 在T2的run中,调用t1.join,让t1执行完成后再让T2执行 public class Test { // 1.现在有T1.T2.T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行 public static void main(String[] args) { final Thread t1 = new Thread(new Runnable() { @Override public voi

小测试整理(含T1 T2)

这次测试规模较小,前两题也较水,但需要整理 T1(Jelly的男♂难题1): 从一个点出发,以四连通的方式扩散,可以走#,不能走o,走过的格子每单位时间会增加1点高度,问扩散完整间屋子需要的时间,以及此时高度的和. 并且(起点格不算高度) water_lift一看:哇,钻出来一个光头这不s*题吗, 然后爆0了... 这题一看就是喜闻乐见的广搜题,判断由来就是众所周知,当每一步的花费一致并且求最小步数时,用广搜吧. 正确性白书已给出证明, 对于这道题,最小步数很好求,然而看似剩下了一个问题,实际剩