C# 是否有if(struct==null)的工作替代方案?
我试图检查数组中的结构是否已分配,但无法检查它或它的数据是否为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; }
[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。