我有一个通用的方法来生成最小值和最大值内的随机数。我也有一个类似的函数来生成具有相同限制的越界值。
但问题是,我需要填写不同类型的变量。一些变量是无符号的,并且最小-最大范围与它们的无符号类型相同。
当我尝试为这些变量创建越界值时,我超出了变量的限制(准确地说是 ushort)。
这是我的通用方法:
private static U GenerateOutOfBounds<U>(U minimum, U maximum) where U : IComparable, IFormattable, IConvertible
{
bool b = g.NextBoolean();
long signCheckForMinimum = Convert.ToInt64(minimum);
double maxpp = g.NextDouble(Convert.ToDouble(maximum), Convert.ToDouble(maximum) + g.Next());
double minpp = g.NextDouble(Convert.ToDouble(maximum), Convert.ToDouble(maximum) + g.Next());
if (signCheckForMinimum >= 0)
{
b = true;
}
if (b)
{
return (U)Convert.ChangeType(maxpp, Type.GetTypeCode(typeof(U)));
}
else
{
return (U)Convert.ChangeType(minpp, Type.GetTypeCode(typeof(U)));
}
}
我试图通过将其转换为 long 来确定该数字是否未签名,但我现在可以看到这种方法是非常错误的。
那么如何确定我得到的变量是否是无符号的,或者有没有办法在不与所有无符号类型进行比较的情况下检查该类型是否是无符号的?