我想知道对于数值类型是否有一个特定的约束,允许在以下情况下进行强制转换:
class MyClass<T>
{
...
void MyMethod()
{
....
byte value = AnotherObject.GetValue()
Tvalue = (T)value;
....
}
...
}我尝试了装箱和拆箱,如下所示:
Tvalue = (T)(object)value;但这只有在T == byte的情况下才起作用。否则我会得到一个InvalidCastException。
T始终是数字类型(如short、float等)。
发布于 2011-01-12 02:46:55
可以,您只能对同一类型的值取消装箱。
你有没有试过使用
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>作为第一个传球。但是,该约束与转换工作无关-它只是试图阻止调用者使用不适当的类型。
https://stackoverflow.com/questions/4661366
复制相似问题