我有一個通用的方法來生成最小和最大內的隨機數。我也有類似的功能來生成具有相同限制的越界值。如何確定通用數字參數是否未簽名?
但事情是,我需要填寫不同類型的變量。一些變量是無符號的,最小 - 最大範圍與它們的無符號類型相同。
當我嘗試爲這些變量創建越界值時,我超過了變量的限制(確切地說,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)));
}
}
我試圖確定,如果數字是無符號用它鑄造於長,但現在我可以看到,方法是非常假的。
那麼如何確定我得到的變量是無符號的,還是有任何方法檢查類型是否未經簽名而不與所有無符號類型進行比較?
我會這樣做的主要方式是在'GetTypeCode'(你已經使用過)上做'switch',但坦率地說:特定於類型的重載(而不是通用方法)會更直接。 –
我想我會去那個。至少這是一個更優雅的解決方案。 – theaob