我想知道数字类型是否存在特定约束,允许转换在以下情况下工作:
class MyClass<T>
{
...
void MyMethod()
{
....
byte value = AnotherObject.GetValue()
Tvalue = (T)value;
....
}
...
}
我尝试了拳击和拆箱,如:
Tvalue = (T)(object)value;
但这只适用于T == byte
。否则我得到InvalidCastException
。
T始终是数字类型(如short,float等)。
答案 0 :(得分:10)
是的,您只能将值拆分为相同的类型。
您是否尝试过使用
Tvalue = (T) Convert.ChangeType(value, typeof(T));
?这是一个示例:
using System;
class Test
{
static void Main()
{
TestChange<int>();
TestChange<float>();
TestChange<decimal>();
}
static void TestChange<T>()
{
byte b = 10;
T t = (T) Convert.ChangeType(b, typeof(T));
Console.WriteLine("10 as a {0}: {1}", typeof(T), t);
}
}
虽然你可以指定
,但这里没有约束where T : struct, IComparable<T>
作为第一关。该约束与转换工作无关 - 它只是试图阻止调用者使用不合适的类型。