我想知道数字类型是否存在特定约束,允许转换在以下情况下工作:
class MyClass<T>
{
...
void MyMethod()
{
....
byte value = AnotherObject.GetValue()
Tvalue = (T)value;
....
}
...
}
Run Code Online (Sandbox Code Playgroud)
我试过拳击和拆箱,如:
Tvalue = (T)(object)value;
Run Code Online (Sandbox Code Playgroud)
但这只适用于T == byte.否则我会得到一个InvalidCastException.
T始终是数字类型(如short,float等).
Jon*_*eet 10
是的,您只能将值拆分为同一类型.
你尝试过使用过吗?
Tvalue = (T) Convert.ChangeType(value, typeof(T));
Run Code Online (Sandbox Code Playgroud)
?这是一个示例:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然您可以指定,但这里没有约束
where T : struct, IComparable<T>
Run Code Online (Sandbox Code Playgroud)
作为第一关.该约束与转换工作无关 - 它只是试图阻止调用者使用不适当的类型.