在静态 Convert class? 中使用反射和泛型将十进制转换为二进制?
Convert decimal to binary with reflection and generics in the static Convert class?
我正在尝试创建一个静态泛型函数来将十进制(数字类型)转换为二进制字符串。
让我解释一下。
我知道我必须做的是:
int number = 12;
string binaryString = Convert.ToString(number, 2);
这很简单,但我还想用其他参数类型将十进制转换为二进制,例如 bytes, shorts(Int16), 多头 (Int64).我知道 Convert.Tostring() 有所有的重载,我只需要像这样重载:
public static string DecToBinary(short number)
{
return Convert.ToString(number, 2);
}
public static string DecToBinary(long number)
{
return Convert.ToString(number, 2);
}
//etc
但我想用泛型和反射来实现...
所以我尝试了这个:
public static string DecToBinary<T>(T number) where T : struct, IComparable, IFormattable, IConvertible
{
return (string)typeof(Convert).GetMethod("ToString").Invoke(null, new object[] { number, 2 });
}
但是我在运行时遇到了一个问题:
Ambiguous match found.
并且有道理,因为反射使用 object 作为参数类型并且永远不知道我想要什么类型...
谁能帮我解决这个问题?
检查 Type.GetMethod() 的重载,它允许您提供参数类型数组 (Type[]
)。这应该有助于 CLR 解决 Convert.ToString()
方法的正确重载。
我正在尝试创建一个静态泛型函数来将十进制(数字类型)转换为二进制字符串。
让我解释一下。 我知道我必须做的是:
int number = 12;
string binaryString = Convert.ToString(number, 2);
这很简单,但我还想用其他参数类型将十进制转换为二进制,例如 bytes, shorts(Int16), 多头 (Int64).我知道 Convert.Tostring() 有所有的重载,我只需要像这样重载:
public static string DecToBinary(short number)
{
return Convert.ToString(number, 2);
}
public static string DecToBinary(long number)
{
return Convert.ToString(number, 2);
}
//etc
但我想用泛型和反射来实现... 所以我尝试了这个:
public static string DecToBinary<T>(T number) where T : struct, IComparable, IFormattable, IConvertible
{
return (string)typeof(Convert).GetMethod("ToString").Invoke(null, new object[] { number, 2 });
}
但是我在运行时遇到了一个问题:
Ambiguous match found.
并且有道理,因为反射使用 object 作为参数类型并且永远不知道我想要什么类型...
谁能帮我解决这个问题?
检查 Type.GetMethod() 的重载,它允许您提供参数类型数组 (Type[]
)。这应该有助于 CLR 解决 Convert.ToString()
方法的正确重载。