首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数值具体类型转换为数值泛型类型

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

Stack Overflow用户
提问于 2011-01-12 02:44:02
回答 1查看 289关注 0票数 5

我想知道对于数值类型是否有一个特定的约束,允许在以下情况下进行强制转换:

代码语言:javascript
复制
class MyClass<T>
{

...

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

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

...

}

我尝试了装箱和拆箱,如下所示:

代码语言:javascript
复制
Tvalue = (T)(object)value;

但这只有在T == byte的情况下才起作用。否则我会得到一个InvalidCastException

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-12 02:46:55

可以,您只能对同一类型的值取消装箱。

你有没有试过使用

代码语言:javascript
复制
Tvalue = (T) Convert.ChangeType(value, typeof(T));

?下面是一个示例:

代码语言:javascript
复制
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);
    }
}

这里没有约束,尽管您可以指定

代码语言:javascript
复制
where T : struct, IComparable<T>

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4661366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档