gpt4 book ai didi

c# - 有什么方法可以防止/检测自动/隐式类型转换?

转载 作者:行者123 更新时间:2023-12-01 21:27:46 24 4
gpt4 key购买 nike

考虑这些方法,每个方法都从输入缓冲区中提取字节:

byte ReadByte(List<byte> data); //removes and returns 1 byte
UInt16 ReadUInt16(List<byte> data); //removes and returns 2 bytes as a short
UInt32 ReadUInt32(List<byte> data); //removes and returns 4 bytes as an int

现在我有一个像这样的结构/类:

class Thing
{
public byte a{get;set;}
public UInt16 b{get;set;}
public UInt32 c{get;set;}
public byte d{get;set;}

public void Read(List<byte> data)
{
a = ReadByte(data);
b = ReadUInt16(data);
c = ReadUInt16(data); //BUG this is a 32bit data
d = ReadByte(data);
}
}

因为 short 会自动提升为 int,所以这段代码可以正常编译和运行,但引入了难以发现的错误 - 它已阅读比 c 应少 2 个字节,所有后续读取的值都将是错误的。

是否有任何技术可用于确保当 c 的类型为 UInt32 时,它不会接受 UInt16 或其他类型合法类型?

理想情况下 Thing 不会改变,但如果您的解决方案需要它,那也没关系。

最佳答案

最好的方法是编写单元测试来验证输入是否与预期输出相匹配。您还可以进行反射以自动执行逻辑或使用代码生成器执行操作。

除非您想编写 Roslyn 分析器,否则在构建时没有任何东西可以帮助您。

关于c# - 有什么方法可以防止/检测自动/隐式类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62881282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com