在静态 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() 方法的正确重载。