将整数转换为字节但不溢出

时间:2014-09-11 07:20:53

标签: c# .net casting integer byte

如何在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并将其与原始值进行比较?

2 个答案:

答案 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;
}