'=>' 是什么意思(在函数 / 属性 上下文中)?
What does '=>' mean (in functions / property context)?
我在开发 Xamarin 应用程序时使用 Lambdas 获得了自动生成的代码:
public override string this[int position] => throw new NotImplementedException();
public override int Count => throw new NotImplementedException();
=>
运算符 在此上下文中是什么意思?
谢谢
R
这些不是 lambda,它们是 Expression-bodied Members!
在 属性 的上下文中,这些基本上是 属性 的 getter 简化为单个表达式(而不是整个语句)。
这个:
public override int Count => throw new NotImplementedException();
相当于:
public override int Count {
get { throw new NotImplementedException(); }
}
正如@sweeper 在您的示例中所说,它们与 lambda 表达式无关,因为它们是表达式主体运算符(在 C# 6 中引入并在 7 中扩展)。它也用于表示 lambda 表达式,因此它的用法有两种。
有关 =>
运算符每种用法的更多信息,请参见此处; https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/lambda-operator
首先,让我们澄清一下 =>
运算符目前在两种不同的上下文中使用:
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)}";
}
}
Dumping object(Int32)
1
Dumping object(String)
2 x 7 = 14
在这里,NotImplementedException
代码,只是告诉你(开发人员)属性 和索引器没有实现但应该被实现,被一些函数替换:
- Count 是只读的 属性 总是返回 1
- 每当您将
[ ... ]
应用于对象时,都会返回双倍索引
注意在早期版本的 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 中,您必须输入更少的内容才能获得相同的结果。
我在开发 Xamarin 应用程序时使用 Lambdas 获得了自动生成的代码:
public override string this[int position] => throw new NotImplementedException();
public override int Count => throw new NotImplementedException();
=>
运算符 在此上下文中是什么意思?
谢谢 R
这些不是 lambda,它们是 Expression-bodied Members!
在 属性 的上下文中,这些基本上是 属性 的 getter 简化为单个表达式(而不是整个语句)。
这个:
public override int Count => throw new NotImplementedException();
相当于:
public override int Count {
get { throw new NotImplementedException(); }
}
正如@sweeper 在您的示例中所说,它们与 lambda 表达式无关,因为它们是表达式主体运算符(在 C# 6 中引入并在 7 中扩展)。它也用于表示 lambda 表达式,因此它的用法有两种。
有关 =>
运算符每种用法的更多信息,请参见此处; https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/lambda-operator
首先,让我们澄清一下 =>
运算符目前在两种不同的上下文中使用:
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)}";
}
}
Dumping object(Int32)
1
Dumping object(String)
2 x 7 = 14
在这里,NotImplementedException
代码,只是告诉你(开发人员)属性 和索引器没有实现但应该被实现,被一些函数替换:
- Count 是只读的 属性 总是返回 1
- 每当您将
[ ... ]
应用于对象时,都会返回双倍索引
注意在早期版本的 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 中,您必须输入更少的内容才能获得相同的结果。