美文网首页
C#语法糖之Tuple

C#语法糖之Tuple

作者: 勿念情 | 来源:发表于2022-09-01 09:54 被阅读0次

    在某些情况下,我们需要有多个返回值。举个例子,比如某个函数提供的功能是查询数组中的最大值和最小值。
    通常我们会考虑把为返回值声明一个结构体,或者是把返回值通过out返回出去。即:

    // first way
    struct MinMaxResult
    {
        public int Min { get; set; }
        public int Max { get; set; }
    }
    
    MinMaxResult FindMinMax(int[] data);
    
    // second way
    void FindMinMax(int[] data, out int min, out int max);
    

    对于某些很常用的、或者具有意义的结果,我们通常会用声明结构体。比如Point或者Rect。但对于某些使用范围仅仅在一两个文件的,我们通常不去声明一个结构体。这个时候我们可以使用Tuple。

    Tuple<int, int> FindMinMax(int[] data);
    
    // How to use it
    var minMaxResult = FindMinMax(data);
    int min = minMaxResult.Item1;
    int max = minMaxResult.Item2;
    

    可以看到,代码会更加的灵活。但是同样也导致了别的问题。我们使用的时候,Item1和Item2这种的名字没有实际的意义,导致代码可读性变差。所以C#在后续的版本中进行了改进,我们可以写成这样:

    (int min, int max) FindMinMax(int[] data);
    
    // How to use it
    var result = FindMinMax(data);
    int min = result.min;
    int max = result.max;
    
    // Another way
    int min, max;
    (min, max) = FindMinMax(data);
    
    // Or even shorter
    (int min, int max) = FindMinMax(data);
    
    // Or you just want max
    (_, int max) = FindMinMax(data);
    

    如果你没有对Tuple起名字,默认的名字依旧是Item1、Item2...

    (int, int) FindMinMax(int[] data);
    
    // How to use it
    var result = FindMinMax(data);
    int min = result.Item1;
    int max = result.Item2;
    

    相关文章

      网友评论

          本文标题:C#语法糖之Tuple

          本文链接:https://www.haomeiwen.com/subject/mxmenrtx.html