ValueTuple基本用法

首先要理解ValueTuple是继承自System.ValueType的,Net4.7内置。

ValueTuple是一个结构体,也就说是值类型。

  • 接收值可用Item表示,可以识别类型。
  • 接收时改别名,相当于直接声明三个变量接受对应值。
  • 可简写。

示例1:接收值用Item表示


void Start()
{
    var value = GetGameValue();
    print(string.Format("{0}{1}{2}",value.Temp1,value.Temp2,value.Temp3));
}

ValueTuple<stirng,int,bool> GetGameValue()
{
    return new ValueTuple<stirng,int,bool>("Cube",1,true);
}

以上示例可输出:Cube、1、true

示例2:接收时改名


void Start()
{
    var (a,b,c) = GetGameValue(); //注意:接收时改名
    print(string.Format("{0}{1}{2}",a,b,c));
}

ValueTuple<stirng,int,bool> GetGameValue()
{
    return new ValueTuple<stirng,int,bool>("Cube",1,true);
}

示例3:可简写


void Start()
{
    var v = GetGameValue(); //注意:接收时改名
    print(string.Format("{0}{1}{2}",v.a,v.b,v.c));
}
// 简写
(string a,int b, bool c) GetGameValue()
{
    return ("Cube",1,true);
}

实战

用ValueTuple实现多Key字典

Dictionary<ValueTuple<int,int,A> dic = new Dictionary<(int,int),A>();

int key1 = 1;
int key2 = 2;
dic.Add((key1,key2),new A{a=1});

if(dic.TryGetValue((key1,key2), out A value))
{
    Debug.Log(value.a);
}

因为ValueTuple是值类型,所以不会造成GC,不过在Dictionaty存取的时候需要算两个hash,还是在时间上有所增加的,如果没有特殊需求最好是不要用ValueTuple来做多key字典。在实际开发中可以用ValueTuple来做方法的返回值还是比较好用的。

Last modification:January 18th, 2021 at 03:13 am
如本文“对您有用”,请作者喝杯咖啡吧!