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

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

ConvertValue<T>(string value)

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

类似地,如果Tboolean,函数将把value转换为boolean并返回它.

怎么写这个?

推荐答案

像这样的?

public static T ConvertValue<T>(string value)
{
    return (T)Convert.ChangeType(value, typeof(T));
}

然后你可以这样使用它:

int val = ConvertValue<int>("42");

Edit:

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

public static T ConvertValue<T,U>(U value) where U : IConvertible
{
    return (T)Convert.ChangeType(value, typeof(T));
}

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

.net相关问答推荐

Long.MaxValue从Single到Long的转换导致溢出异常

尽管有`disable`注释,但未 suppress Pylint语法错误

从没有流的EventStore中读取流不存在异常

与 Datagrid 的 SelectedItem 链接时的 WPF RadioButton 绑定问题

如何手动注入依赖注入

如何将 Javascript 日期时间转换为 C# 日期时间?

C#6.0 字符串插值本地化

是否可以像 WebView 一样在 Windows 窗体中嵌入 Gecko 或 Webkit?

.NET 等价于旧的 vb left(string, length) 函数

DBNull 的意义何在?

实体框架 - 无法将 lambda 表达式转换为类型字符串,因为它不是委托类型

如何使用反射在 .NET 中调用重载方法

如何结合 ||条件语句中的运算符

参数命名:文件名还是文件名?

.NET 反射的成本是多少?

ObservableCollection<> 与 List<>

如何获取命名空间中的所有类?

如何将 MailMessage 对象作为 *.eml 或 *.msg 文件保存到磁盘

名称 <...> 不存在于命名空间 clr-namespace <...>

没有科学记数法的双精度字符串转换