2013-05-03 167 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