为什么'stackalc '关键字不能与属性一起工作
本文关键字:属性 一起 工作 关键字 stackalc 为什么 不能 | 更新日期: 2023-09-27 18:10:50
我最近用c#写了一些不安全的代码,注意到这会产生一个语法错误:
public unsafe class UnsafeByteStream
{
public UnsafeByteStream(int capacity)
{
this.Buffer = stackalloc byte[capacity];
}
public byte* Buffer { get; }
}
结果是:"Invalid expression term 'stackalloc' / ; expected / } expected"
。但是,当我首先将它分配给一个本地字段时,如下所示:
public UnsafeByteStream(int capacity)
{
byte* buffer = stackalloc byte[capacity];
this.Buffer = buffer;
}
则不产生语法错误。
这是有原因的,还是编译器出了什么问题?我知道指针类型属性不是那么常见,但我仍然不明白为什么这是一个语法错误而不是语义错误,假设代码有问题。
stackalloc
必须是局部变量声明的一部分,如文档中所述。
[stackalloc]关键字仅在局部变量初始化项中有效。下面的代码会导致编译器错误。
int* block; // The following assignment statement causes compiler errors. You // can use stackalloc only when declaring and initializing a local // variable. block = stackalloc int[100];
确实是一个语法错误;并拒绝obj.Property = stackalloc ..
形式
(后面对属性的赋值是一个未被捕获的语义错误)