将数值具体类型转换为数字通用类型

时间:2011-01-11 18:44:02

标签: c# generics

我想知道数字类型是否存在特定约束,允许转换在以下情况下工作:

class MyClass<T>
{

...

void MyMethod()
{
    ....
    byte value = AnotherObject.GetValue()

    Tvalue = (T)value;
    ....
}

...

}

我尝试了拳击和拆箱,如:

Tvalue = (T)(object)value;

但这只适用于T == byte。否则我得到InvalidCastException

T始终是数字类型(如short,float等)。

1 个答案:

答案 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>

作为第一关。该约束与转换工作无关 - 它只是试图阻止调用者使用不合适的类型。