为什么我会在创建和返回新结构时遇到此错误?

RoK*_*oKK 3 c# events struct compiler-errors reference

编译此代码时出错:

using System;

public struct Vector2
{
    public event EventHandler trigger;

    public float X;
    public float Y;

    public Vector2 func()
    {
        Vector2 vector;
        vector.X = 1;
        vector.Y = 2;
        return vector;  // error CS0165: Use of unassigned local variable 'vector'
    }
}
Run Code Online (Sandbox Code Playgroud)

您好!

编译器说:"使用未分配的局部变量'vector'"并指向返回值.在我看来,Vector2成为一个引用类型(没有事件成员,它正常行事).怎么了?

Rob*_*ker 14

在C#中,除非要初始化所有字段,否则仍需要"new"一个结构来调用构造函数.你没有分配EventHandler成员'trigger'.

尝试分配"触发器"或使用:

Vector2 vector = new Vector2()
Run Code Online (Sandbox Code Playgroud)

新对象在堆上分配,它仍在功能堆栈上分配.

引用MSDN:

使用new运算符创建结构对象时,会创建它并调用相应的构造函数.与类不同,可以在不使用new运算符的情况下实例化结构.如果不使用new,则字段将保持未分配状态,并且 初始化所有字段之前无法使用对象.