【发布时间】:2018-09-14 04:49:07
【问题描述】:
以下内容无法编译。既然这不是匿名方法、lambda 表达式或查询表达式,为什么这是一个限制? (将文本作为 ref ReadOnlySpan 工作正常。)
void TestNestedSpan()
{
var text = "Some text".AsReadOnlySpan();
var success = TryParseS();
bool TryParseS()
{
//Compile Error CS8175 Cannot use ref local 'text' inside
// an anonymous method, lambda expression, or query expression
if (text.Length < 1 || text[0] != 'S')
return false;
text = text.Slice(1);
return true;
}
}
【问题讨论】:
-
你觉得
TryParseS是怎么编译的? CLR 并没有真正的嵌套函数。都是编译器撒的谎。 -
@JeroenMostert 公平地说,您不必担心这一点。如果编译器告诉您不能在匿名方法、lambda 表达式或查询表达式中使用某个功能,那么当您不在匿名方法、lambda 表达式或查询表达式中使用该功能时,这听起来像是一个编译器错误我。错误消息应提及本地函数。
-
@hvd:我正要改变我的评论,提到诊断可能应该被修改——但现在我不会了。 :-)
-
修改诊断仍然会给我留下“为什么这是一个限制?”。
-
@RandRandom 是关于NuGet包
System.Memory中定义的类型和扩展方法的问题。
标签: c# c#-7.2 system.memory