当前位置:   article > 正文

C# => 符号的用法_c# =>

c# =>

C# => 符号的用法

最近看到一种写法让我感到迷惑,之前一直以为=>是Lambda表达式的写法,现在遇到的明显不是,所以就记录一下。

// 这里的MaxHealth1和MaxHealth2有什么区别?
public class Health
{
	// expression-bodied member property
	public int MaxHealth1 => x ? y:z;
	// field with field initializer
	public int MaxHealth2 = x ? y:z;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

C#里=>的两种用法

1.Lambda中的用法
在C# 3到C# 5版本间,=>只有此种用法。
下面是我平常用到的:

useCard.transform.DOMove(targetObject.position,0.3f).OnComplete(
        ()=>
        {
            useCard.transform.SetParent(targetObject,false);
            useCard.transform.localPosition = Vector2.zero;
            //useCard.transform.localScale= Vector2.one;
            useCard.GetComponent<Card>().isMoving = false;
            
        }
        );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

类似于()=>{}这种,小括号里面是方法的参数,大括号里面是方法体,构成了这个匿名函数。
2.在变量声明的时候的用法
在C# 6的版本里,=>开始用于expression-bodied members,代码如下:

public bool Jump => playerInputActions.Gameplay.Jump.WasPressedThisFrame();
public bool StopJump => playerInputActions.Gameplay.Jump.WasReleasedThisFrame();
public bool Move => AxisX != 0f;
public float AxisX => axes.x;
  • 1
  • 2
  • 3
  • 4

而这种语法,是一种Syntax Sugar,上面的代码等同于下面的:

public bool Move
{
	get
	{
		return   Axisx!=0;
    }
}
public bool AxisX
{
	get
	{
		return   axes.x;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

所以,上面的MathHealth1和MathHealth2的区别,其实就是C#里Property和Field的区别:

MaxHealth1是一个Property,设置了getter,每次访问该值的时候,都会调用x?y:z表达式
MathHeath2是一个Field,它的表达式只会在其初始化时计算一次。

参考了博主「弹吉他的小刘鸭」的文章,
原文链接:https://blog.csdn.net/alexhu2010q/article/details/118439345

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/115671
推荐阅读
相关标签
  

闽ICP备14008679号