【C#】 =>符号

本文介绍了C#编程中的Lambda表达式及其在委托、LINQ中的应用,同时详细阐述了表达式主体成员的概念,包括只读属性、方法、构造函数、终结器和索引器的实现方式。示例代码展示了如何使用这些特性来简化代码并提高可读性。
摘要由CSDN通过智能技术生成

=>读作 goes to,是C#3.0新增的内容

Lambda

委托

delegate int Method(int a, int b);
Method m += (a ,b) => a + b;
Console.WriteLine(m(2, 3));

linq
比较常用的就是作为linq表达式

    internal abstract class GeoService
    {
        internal abstract void Update(GeoLocation location);

        internal abstract string Name { get; }
    }

     private List<GeoService> _geoServices = new List<GeoService>();

     private void NotifyLocationChanged(GeoLocation location)
      {
          _geoServices.ForEach(g => g.Update(location));
      }

参数g没有定义类型是因为他自动推断出类型来了,因为这个list能遍历的东西只有这个。
这个语句里,就是遍历这个list列表,对每个项执行一下update方法。
作为参数

RelayCommand(() => this.AddPerson(), () => this.CanAddPerson());

可以翻译为 RelayCommand(参数一, 参数二);

参数一 :() => this.AddPerson()

参数二 :() => this.CanAddPerson()

() => this.AddPerson() 的意思是 一个没有参数的方法,返回 this.AddPerson(),而这个返回值的类型不用指定,系统会自动判断

同理 () => this.CanAddPerson() 就是 一个没有参数的方法返回this.CanAddPerson()

表达式主体定义

成员开始提供支持的版本
方法C#6
只读属性C#6
PropertyC#6
构造函数C#6
终结器C#6
索引器C#6

方法

expression-bodied 方法包含单个表达式,它返回的值的类型与方法的返回类型匹配;或者,对于返回 void 的方法,其表达式则执行某些操作。 例如,替代 ToString 方法的类型通常包含单个表达式,该表达式返回当前对象的字符串表示形式。

下面的示例定义 Person 类,该类通过表达式主体定义替代 ToString。 它还定义向控制台显示名称的 DisplayName 方法。 请注意,ToString 表达式主体定义中未使用 return 关键字。

using System;

public class Person
{
   public Person(string firstName, string lastName)
   {
      fname = firstName;
      lname = lastName;
   }

   private string fname;
   private string lname;

   public override string ToString() => $"{fname} {lname}".Trim();
   public void DisplayName() => Console.WriteLine(ToString());
}

class Example
{
   static void Main()
   {
      Person p = new Person("Mandy", "Dejesus");
      Console.WriteLine(p);
      p.DisplayName();
   }
}

只读属性

从 C# 6 开始,可以使用表达式主体定义来实现只读属性。 为此,请使用以下语法:

PropertyType PropertyName => expression;

下面的示例定义 Location 类,其只读 Name 属性以表达式主体定义的形式实现,该表达式主体定义返回私有 locationName 字段值:

public class Location
{
   private string locationName;

   public Location(string name)
   {
      locationName = name;
   }

   public string Name => locationName;
}

属性

从 C# 7.0 开始,可以使用表达式主体定义来实现属性 get 和 set 访问器。 下面的示例演示其实现方法:

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

构造函数

构造函数的表达式主体定义通常包含单个赋值表达式或一个方法调用,该方法调用可处理构造函数的参数,也可初始化实例状态。

以下示例定义 Location 类,其构造函数具有一个名为“name”的字符串参数。 表达式主体定义向 Name 属性分配参数。

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

终结器

终结器的表达式主体定义通常包含清理语句,例如释放非托管资源的语句。

下面的示例定义了一个终结器,该终结器使用表达式主体定义来指示已调用该终结器。

public class Destroyer
{
   public override string ToString() => GetType().Name;

   ~Destroyer() => Console.WriteLine($"The {ToString()} finalizer is executing.");
}

索引器

与使用属性一样,如果 get 访问器包含返回值的单个表达式或 set 访问器执行简单的赋值,则索引器 get 和 set 访问器包含表达式主体定义。

下面的示例定义名为 Sports 的类,其中包含一个内部 String 数组,该数组包含大量体育运动的名称。 索引器的 get 和 set 访问器都以表达式主体定义的形式实现。

using System;
using System.Collections.Generic;

public class Sports
{
   private string[] types = { "Baseball", "Basketball", "Football",
                              "Hockey", "Soccer", "Tennis",
                              "Volleyball" };

   public string this[int i]
   {
      get => types[i];
      set => types[i] = value;
   }
}

拓展

终结器
索引器

参考

Expression-bodied 成员
C#属性使用 =>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软泡芙

给爷鞠躬!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值