将数值具体类型转换为数值泛型类型

5

我想知道数值类型是否有特定的限制,可以使以下情况下的转换起作用:

class MyClass<T>
{

...

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

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

...

}

我尝试使用装箱和拆箱的方法,如下:

Tvalue = (T)(object)value;

但是只有在 T == byte 的情况下才有效。否则会报 InvalidCastException 错误。

T 总是一个数字类型(例如 short,float 等)。


你的目的是什么?你能使用 Converter 吗? - Gabe
1个回答

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>

作为第一次尝试,这个限制与转换的工作无关 - 只是为了防止调用者使用不合适的类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接