我找到了这个解决方案,试图将数字类型转换为通用类型,但解决方案变成了一个广泛的切换案例 由于难以维护以及与数学和比较操作一起工作的每个“功能”,我需要复制这个......
有没有办法减少,简化这种转换?还要考虑数值数据类型是否接受负值?
此类的目标是仅使用内置数值类型。
public class Foo<TYPE>
{
private static TYPE[] tuple = new TYPE[3]
public DoSomething()
{
switch (Type.GetTypeCode(typeof(TYPE)))
{
// Built-in Byte type.
case TypeCode.Byte:
tuple[0] = (TYPE)(object)(byte)0;
tuple[1] = (TYPE)(object)(byte)0;
tuple[2] = (TYPE)(object)(byte)0;
break;
// Built-in Signed Byte type.
case TypeCode.SByte:
tuple[0] = (TYPE)(object)(sbyte)0;
tuple[1] = (TYPE)(object)(sbyte)0;
tuple[2] = (TYPE)(object)(sbyte)0;
break;
// Built-in Short Integer type.
case TypeCode.Int16:
tuple[0] = (TYPE)(object)(short)0;
tuple[1] = (TYPE)(object)(short)0;
tuple[2] = (TYPE)(object)(short)0;
break;
// Built-in Unsigned Short Integer type.
case TypeCode.UInt16:
tuple[0] = (TYPE)(object)(ushort)0;
tuple[1] = (TYPE)(object)(ushort)0;
tuple[2] = (TYPE)(object)(ushort)0;
break;
default:
throw new Exception("The generic type is not a built-in numeric type.");
}
}
}
答案 0 :(得分:1)
如果要将任意值转换为TYPE,可以使用
tuple[0] = Convert.ChangeType(value, typeof(TYPE));
ChangeType已经在所有原始数字类型之间进行映射,以便相互转换。
如果只是分配默认值(即数字类型为0),您可以使用
tuple[0] = default(TYPE);
答案 1 :(得分:0)
如果type是数字内置类型,您可以使用default关键字来获得类型的0(零):
for (int i = 0; i < 3; i ++)
tuple[i] = default(TYPE);