c#:我如何接受任何类型的数字作为参数? 目前我的AddDataInt32()专门请求Int32,但我如何接受任何数字,字节,整数有符号或无符号,所以我可以将它传递给BitConverter.GetBytes()?为每种类型编写相同的函数似乎很愚蠢:(
public void AddDataInt32(Int32 i)
{
Data = ConcatTwoByteArrays(Data, BitConverter.GetBytes(i));
}
答案 0 :(得分:4)
你可以重载方法......
public void AddData (Int32 i)
{...}
public void AddData (Int16 i)
{...}
等。每个数字类型一个。当您调用该过程时,它将采用您编码的任何形式的数字,并使用相同的过程名称。
答案 1 :(得分:2)
嗯,您可以使用反射和泛型自动化它,但IMO重载是更好的选择 - 非常类似于您现有的代码。
反思/泛型示例 - 虽然我并不真的推荐这条路线:
static void Main()
{
byte[] bytes = GetBytes(123);
}
static byte[] GetBytes<T>(T value) {
return Cache<T>.func(value);
}
static class Cache<T> {
public static readonly Func<T, byte[]> func;
static Cache() {
MethodInfo method = typeof(BitConverter)
.GetMethod("GetBytes", new Type[] { typeof(T) });
if (method == null) {
func = delegate { throw new ArgumentException(
"No GetBytes implementation for " + typeof(T).Name); };
} else {
func = (Func<T, byte[]>)Delegate.CreateDelegate(
typeof(Func<T, byte[]>), method);
}
}
}
然后,您可以将其与调用AddData<T>
等的GetBytes<T>
通用方法混合使用。
答案 2 :(得分:1)
public void AddData(object data )
{
}
或
public void AddData<T>( T data )
{
}
虽然我认为我更喜欢重载方法。