c# - 是否有 if(struct == null) 的替代方案?

标签 c# 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;
    }

最佳答案

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

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

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

关于c# - 是否有 if(struct == null) 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32545133/

相关文章:

c# - 结构和枚举真的是对象,还是它们只是可以转换为对象?

c# - 使用 gmail 作为 smtp 从 mvc Controller 发送电子邮件

c# - 在 .NET 4 中使用 IntPtr 时出现 PInvokeStackImbalance 异常? (适用于 .NET 3.5)

c# - C# (.NET) 中是否有更好的 Web 浏览器控件?

c - 使用 union 强制 C 位域对齐

javascript - 测试 Solidity 合约时如何从 Javascript 初始化结构?

arrays - 如何在 Swift 4 中选择要反序列化的 JSON 数组

c# - 文本框 Silverlight 的样式

c - 访问另一个 typedef 结构中的 typedef 结构

C++ 将结构转换为 std::vector<char> 内存对齐