2013-05-03 95 views
5

.NET统一方法知道许多方法来转换数据类型:转换数据类型

  • Convert -class;
  • 类型等(Try)ParseToString等内部函数;
  • 实现接口IConvertable的;
  • TypeConverter;
  • 隐式和显式转换运算符;
  • 我是否错过了另一个?

因此,如果将一种数据类型转换为另一种数据类型,我需要知道这两种类型,我需要知道使用哪种转换方法。如果这两种类型(或两者)中的一种是泛型类型,这变得非常讨厌。

所以我的问题是:我有在.NET统一(通用)的方式来一个数据类型转换为另一种,这可能会使用所有其他有限的方法呢?

回答

2

一个很好的,通用的类型之间的转换方式是Convert.ChangeType。这里是你怎么可以用它来写一个通用的转换方法的例子:

public static TResult Convert<TResult>(IConvertible source) 
{ 
    return (TResult)System.Convert.ChangeType(source, typeof(TResult)); 
} 

它像其他Convert方法,在内部调用IConvertible接口。

这不会使用您的其他转换选项:

  • 最常见的我会觉得这是ToString;对于这一点,你可以添加一个检查,看看是否TResultstring如果是这样,(经过适当null检查)只需拨打ToString您的输入。
  • 使用反射,你可以检查:

这些都是每个辉如果你对反思有一些了解,但是我可以详细说明是否有困难。

+0

更新了我的答案,以解决其他提到的转换方法。 – 2013-05-03 23:53:42

0

你意味着那些都是一样的
他们不是
挑选适当的

Convert类

基本数据类型到另一种基本数据类型转换。

解析是从字符串

的ToString是一个字符串

IConvertible接口

定义各执行参考 或值类型的值转换为一个通用语言运行时的方法类型具有相当的 值。

的TypeConverter类

提供转换类型的值的其他类型的, 以及用于访问标准值和子属性的统一方式。

是的,你需要知道你正在转换的类型。
你应该知道你是从哪种类型转换而来。

随着仿制药没有内置。
充其量你提供了一种方法。
但是,为什么你需要转换泛型?

你似乎暗示不止一种方法是坏事。
对于单一的方式,我喜欢Tim S.的答案+1
但这并不意味着我永远不会使用它。

甚至有更多的方式从SQL数据库中获取数据。
这是一件坏事吗?

+0

我在哪里暗示? – 2017-06-12 16:22:06