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

Vit*_* Py 5 c# generics

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

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)

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