首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么'stackalloc‘关键字不适用于属性?

为什么'stackalloc‘关键字不适用于属性?
EN

Stack Overflow用户
提问于 2015-09-02 00:50:11
回答 1查看 452关注 0票数 3

我最近用C#编写了一些不安全的代码,注意到这会产生语法错误:

代码语言:javascript
复制
public unsafe class UnsafeByteStream
{
    public UnsafeByteStream(int capacity)
    {
        this.Buffer = stackalloc byte[capacity];
    }

    public byte* Buffer { get; }
}

其结果是:"Invalid expression term 'stackalloc' / ; expected / } expected"。但是,当我首先将它分配给一个本地字段时,如下所示:

代码语言:javascript
复制
public UnsafeByteStream(int capacity)
{
    byte* buffer = stackalloc byte[capacity];
    this.Buffer = buffer;
}

然后就不会产生语法错误。

这是有原因的,还是编译器出了问题?我理解指针类型的属性并不那么常见,但我仍然不明白为什么这是一个语法错误,而不是语义错误,假设代码有问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-02 00:54:10

stackalloc必须是局部变量声明的一部分,如在文件中讨论

stackalloc关键字仅在局部变量初始化器中有效。下面的代码会导致编译器错误。 int*块;//以下赋值语句将导致编译器错误。您只能在声明和初始化局部变量//变量时使用stackalloc。区块= stackalloc int100;

因此,它确实是一个语法错误;并且拒绝obj.Property = stackalloc ..表单。

(后面分配给属性的是一个不明确的语义错误。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32343050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档