首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何创建泛型类型转换函数

如何创建泛型类型转换函数
EN

Stack Overflow用户
提问于 2011-07-31 01:03:08
回答 3查看 120.6K关注 0票数 79

可能重复:

is there a generic Parse() function that will convert a string to any type using parse?

我想做一个泛型函数来做一些操作,比如:

代码语言:javascript
复制
ConvertValue<T>(string value)

如果Tint,则函数会将值转换为int并返回结果。

类似地,如果Tboolean,该函数会将value转换为boolean并返回它。

该怎么写呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-31 01:06:26

像这样的东西?

代码语言:javascript
复制
public static T ConvertValue<T>(string value)
{
    return (T)Convert.ChangeType(value, typeof(T));
}

然后您可以像这样使用它:

代码语言:javascript
复制
int val = ConvertValue<int>("42");

编辑:

如果类型U实现了IConvertible,您甚至可以执行更通用的操作,而不依赖于string参数-这意味着您必须指定两个类型参数:

代码语言:javascript
复制
public static T ConvertValue<T,U>(U value) where U : IConvertible
{
    return (T)Convert.ChangeType(value, typeof(T));
}

我考虑过捕捉Convert.ChangeType()可能引发的InvalidCastException异常--但是在这种情况下,你会返回什么呢?default(T)?让调用者处理异常似乎更合适。

票数 215
EN

Stack Overflow用户

发布于 2011-07-31 02:26:42

虽然看起来可能不如IConvertible方法整洁,但您始终可以使用简单的检查typeof(T)来返回T

代码语言:javascript
复制
public static T ReturnType<T>(string stringValue)
{
    if (typeof(T) == typeof(int))
        return (T)(object)1;
    else if (typeof(T) == typeof(FooBar))
        return (T)(object)new FooBar(stringValue);
    else
        return default(T);
}

public class FooBar
{
    public FooBar(string something)
    {}
}
票数 9
EN

Stack Overflow用户

发布于 2011-07-31 01:06:43

ConvertValue( System.Object o ),然后您可以根据o.GetType()结果进行分支,并将o向上强制转换为要使用该值的类型。

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

https://stackoverflow.com/questions/6884653

复制
相关文章

相似问题

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