我到达此解决方案以将数值类型转换为泛型类型,但解决方案成为扩展开关案例。
使难以维护和每一个数学和比较作业的“功能”,我需要复制这...C#在通用数据类型和内置数值类型之间进行数值类型转换
有没有什么办法来减少,简化这种转换?考虑数字数据类型是否接受负值?
目标是让这个类只能使用内置的数字类型。
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.");
}
}
}
这就是让我松对C++模板的案例之一。 (这可能是在运行时发布几个实现的不错选择 – cdhowie
不,C#中没有任何东西可以让你检测类型是否是数值类型,最好的办法是检测值类型,如果你能告诉我们你打算如何使用这些信息,可能会更容易给你一个更有用的建议。 –
你如何使用'tuple'?它看起来像你只想要一个通用的'零'接口? – Lee