如何在C#中将整数值转换/转换为字节值但不包围或抛出异常?我正在寻找的是某种bool byte.TryConvert(int i, out b)
方法。
我尝试Convert.ToByte
并直接演员。
byte b = Convert.ToByte(257); // throws OverflowException
byte b = (byte)257; // results in 1
byte b = (byte)(-1); // results in 255
或者我必须"反向投射" (缺少一个更好的词)将字节转换为int并将其与原始值进行比较?
答案 0 :(得分:7)
在我的具体用例中,我实际上是一个可以为空的字节类型。 ... 有没有像bool byte.TryConvert(int i,out b)?
这样的方法
没有。你必须做类似的事情:
byte? result = (value >= byte.MinValue && value <= byte.MaxValue)
? (byte)value : (byte?)null;
答案 1 :(得分:2)
自己编写方法。检查int的值。如果它在范围内,则返回true并使用直接强制转换将其分配给out参数。如果不是,则返回false,将out参数设置为零。
Downvoter请评论。
编辑这是我的解决方案;与Marc Gravell不同,它没有引入可空性:
public bool TryToByte(int value, out byte result)
{
var success = value >= byte.MinValue && value <= byte.MaxValue;
result = (byte)(success ? value : 0);
return success;
}