if(struct == null)有替代工作吗?

时间:2015-09-13 00:30:03

标签: c# struct

我正在尝试检查数组中的结构是否已分配,我无法检查它或它的数据为null。有没有办法检查它是否已分配?

STRUCT:

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

方法

    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;
    }

2 个答案:

答案 0 :(得分:1)

结构不能为null,因为它们是值类型。相反,您可以使用default(CharInfo)比较默认值或创建Nullable。

答案 1 :(得分:1)

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

如果你可以扩展结构,你可以给它一个bool IsAssigned。默认初始化将此设置为false。另一种选择是将其包装成可空的:
CharInfo?[] screenBufferWithNull = new CharInfo?[123];

如果不需要扩展结构,或者用nullable<struct>替换结构,并且您希望像示例中那样保留结构的多样性,最简单的解决方法是将此信息保存在单独的bool数组中:
bool[] screenbufferIsAssigned = new bool[screenbuffer.Length];