C# 元祖,最佳的临时变量。

前言

JS为什么适合处理前端的数据,是因为前端的数据特点是动态的。比如我今天想传3个参数,后天想传5个参数,大后天我想把字段名Age改成age。这都支持。这就是动态语言的特点,特点就是修改起来极其方便,数据类型是在编译的时候才确定的。但是也有许多问题。

  • 动态语言在传入的时候根本不知道传入的值是什么。
    • 需要极其严格的代码规范,明确传入的值的类型。
  • 动态语言是一直在编译代码的类型
    • 相对于静态语言来说,效率极低。所以动态语言不适合高性能场景。
  • 动态语言难以有完整的代码提示
    • 虽然现在编译器有了很强大的代码提示,但是还是会出错。因为你根本不知道传入的参数是什么。

我最近在B站上面看到了这篇教程,太厉害了。

C#基础教程 ValueTuple元组 VS 匿名类型, 最佳临时类型花落谁家?

匿名对象

先说一下匿名对象,匿名对象出来的比较早。虽然是比较好的临时变量,但是还是有很多问题。

//匿名对象的声明
 var MyObj = new
{
    
    
    Name= "啦啦",
    Age= 1,
    Sex2= "女"
};
  • 在函数中无法入参出参。只能转化为obj。因为是匿名的,所以你没办法使用类名,因为根本不存在
  • 动态匿名dynamic完全没有代码提示,极其容易出问题。失去了静态语言的优雅
  • obj转匿名对象只能用反射

详细比较请看该Up主的视频
C#基础教程 ValueTuple元组 VS 匿名类型, 最佳临时类型花落谁家?

简单来说就是元祖完胜匿名对象。

元祖

元祖完美解决了这些问题。而且能轻易的入参出参

元祖声明

使用()而不是{}。而且不需要new 。里面的元素用:(冒号)赋值

var MyObj = (
    Name : "啦啦",
    Age : 1,
    Sex : "女"
);

而且有代码提示

元祖函数入参和出参

//入参:
public static void Print((string Name, int Age, string Sex) myObj)
{
    
    

}

//出参

public static (string,int,string) Print()
{
    
    
    return ("a",1,"b");
}

和obj互转

 var MyObj = (
	 Name : "啦啦",
    Age : 1,
    Sex : "女"
);
object temp = MyObj;

MyObj  = ((string Name, int Age, string Sex))temp;
//这样也没关系。只有个数,类型和顺序对应即可
MyObj  = ((string Name2, int Age3, string Sex4))temp;

注意,这里的Name只是字段名,相当于别名。元祖是数值类型和顺序强匹配,字段值不相等也没关系。

结论

元祖实在的太厉害了。既保留了C#的静态优势,又添加了动态语言的随心所欲。简单来说,元祖就是一obj的列表,并不是一个类。但是微软给我们简化了语法,大大提高了开发的顺序。

猜你喜欢

转载自blog.csdn.net/qq_44695769/article/details/131873545