我在开发Xamarin应用程序时使用Lambdas获得了一个自动生成的代码:
public override string this[int position] => throw new NotImplementedException();
public override int Count => throw new NotImplementedException();
=>
运算符在此上下文中的含义是什么?
由于 [R
答案 0 :(得分:4)
这些不是lambdas,它们是Expression-bodied Function Members!
在属性的上下文中,这些属性基本上是简化为单个表达式的属性的getter(而不是整个语句)。
此:
public override int Count => throw new NotImplementedException();
相当于:
public override int Count {
get { throw new NotImplementedException(); }
}
答案 1 :(得分:1)
正如@sweeper在你的例子中所说,它们与lambda表达式无关,因为它们是表达式体操作符(在C#6中引入并在7中扩展)。它也用于表示lambda表达式,因此它的用法是两倍。
有关=>的每次使用的更多信息运营商可以在这里找到; https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/lambda-operator
答案 2 :(得分:0)
首先,让我们澄清=>
运算符目前在两种不同的上下文中使用:
Lambda表达式。
通常你会在Linq看到它们,例如
var query = Customers.OrderBy(x => x.CompanyName);
表达身体的功能。这就是我们在这里所拥有的。
要了解 =>
的含义,请查看以下简单示例:
using System;
public class Program
{
public void Main()
{
var obj = new Test();
obj.Count.Dump();
obj[7].Dump();
}
class Test
{
public int Count => 1;
public string this[int position] => $"2 x {position} = {(2*position)}";
}
}
转储对象(Int32)
1
倾倒对象(String)
2 x 7 = 14
这里,NotImplementedException
代码,只是告诉你(开发人员)属性和索引器没有实现但应该被替换为某个函数:
[ ... ]
应用于对象时,都会返回doubled索引注意在早期版本的C#中你必须写:
class Test
{
public int Count { get { return 1; } }
public string this[int position] {
get { return String.Format("2 x {0} = {1}",
position, (2*position).ToString()); }}
}
相当于上面的代码。因此,在C#7中,您必须输入更少的内容才能获得相同的结果。