C# 是否有if(struct==null)的工作替代方案?

C# 是否有if(struct==null)的工作替代方案?,c#,struct,C#,Struct,我试图检查数组中的结构是否已分配,但无法检查它或它的数据是否为null。有没有办法检查它是否已经被分配了 结构: [StructLayout(LayoutKind.Explicit)] public struct CharInfo { [FieldOffset(0)] public CharUnion Char; [FieldOffset(2)] public short Attributes; }

我试图检查数组中的结构是否已分配,但无法检查它或它的数据是否为null。有没有办法检查它是否已经被分配了

结构:

    [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;
    }
public void render(){
对于(int i=0;i<(宽度*高度-1);i++){
if(screenBuffer[i].Char.UnicodeChar!=Convert.ToChar(“”){
ScreenDriver.screenBuffer[i]=screenBuffer[i];
}
}
//ScreenDriver.screenBuffer=屏幕缓冲区;
}

结构不能为空,因为它们是值类型。相反,您可以使用
default(CharInfo)
将结构与其默认值进行比较,或者创建一个可为空的。

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

如果可以扩展该结构,则可以为其指定一个
bool IsAssigned
。默认初始化会将其设置为false。另一个选项是将其包装为可为null的:
CharInfo?[]screenBufferWithNull=new CharInfo?[123];

如果不需要扩展结构,或者用
可空的
替换它,并且希望像示例中那样保留一系列结构,最简单的解决方法是将此信息保留在单独的布尔数组中:

bool[]screenbufferIsAssigned=new bool[screenbuffer.Length];

您可以将
screenbuffer
定义为
Nullable
的数组。将其与默认值(CharInfo)进行比较或将其转换为可空值。可能重复感谢,但现在我收到一个新错误。“错误2运算符“!=”不能应用于“SharpTUI.Krn32.Kernal32.CharInfo”和“SharpTUI.Krn32.Kernal32.CharInfo”类型的操作数。这是因为您需要重载结构的运算符,如本问题所示。另一个选项是让枚举中的一项非常明确地未初始化。例如,枚举测试{NotInitialized=0,红色、绿色、蓝色}。默认值为0。