是否有 if(struct == null) 的可行替代方案?

use*_*615 3 c# struct

我正在尝试检查是否已分配数组中的结构,但无法检查它或者它的数据为空。有什么方法可以检查它是否已分配吗?

结构:

    [StructLayout(LayoutKind.Explicit)]
    public struct CharInfo
    {
        [FieldOffset(0)]
        public CharUnion Char;
        [FieldOffset(2)]
        public short Attributes;
    }
Run Code Online (Sandbox Code Playgroud)

方法

    public void render(){
        for (int i = 0; i < (width * height - 1); i++) {
            if (screenBuffer[i].Char.UnicodeChar != Convert.ToChar(" ")) {
                ScreenDriver.screenBuffer[i] = screenBuffer[i];
            }
        }
       // ScreenDriver.screenBuffer = screenBuffer;
    }
Run Code Online (Sandbox Code Playgroud)

Hug*_*une 5

您可以将该结构与其默认值进行比较:if (struct==default(CharInfo)。但是,这无法区分未初始化的结构和用零初始化的结构。这是因为不存在未初始化的结构之类的东西,结构总是自动初始化的。

如果您可以扩展该结构,则可以给它一个bool IsAssigned. 默认初始化会将其设置为 false。另一种选择是将其包装在可空值中:
CharInfo?[] screenBufferWithNull = new CharInfo?[123];

如果不需要扩展结构或将其替换为 a nullable<struct>,并且您希望保留一组结构(如示例中所示),最简单的解决方法是将这些信息保留在单独的布尔数组中:
bool[] screenbufferIsAssigned = new bool[screenbuffer.Length];