2014-02-13 57 views
1

我有一個可變返回數據類型Object。有時,它返回datetime,有時返回bool對象自動檢測數據類型並將其轉換爲我需要的數據類型

但我不想使用if ... else語句列出所有可能性並轉換爲正確的數據類型。

任何使用方法convert.tostring(xxx)convert.toboolean(xxx)

+4

我無法想象你會如何使用類似的東西。可以添加一個示例代碼顯示? – svick

+1

但是,您將如何使用轉換結果?如果你想有編譯時的支持,你必須將它分配給合適的變量類型,那麼這種轉換的目的是什麼? –

+0

轉換之後,你將mut存儲在一個變量中,這個變量的類型是什麼? – bdn02

回答

2

您可能需要調查Convert類中的Convert.ChangeType方法。

這裏有一個小例子,可以幫助

namespace UnitTest 
{ 
    using System; 

    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Console.WriteLine(ConvertToType(DateTime.Now).GetType().Name); 
      Console.WriteLine(ConvertToType<Guid>(Guid.NewGuid()).GetType().Name); 
      Console.Read(); 
     } 

     public static dynamic ConvertToType(object obj) 
     { 
      //If you're unsure of the type you want to return. 
      return Convert.ChangeType(obj, obj.GetType()); 
     } 

     public static T ConvertToType<T>(object obj) 
     { 
      //If you definitely know the type you want to return. 
      return (T)Convert.ChangeType(obj, typeof(T)); 
     } 
    } 
} 
0

您可以通過使用動態對象概念來實現此目的。

dynamic object concept

+0

我相信OP是不確定的C#打字概念,所以引入動態對象只會損害這個知識更多... –

+0

我認爲不能。因爲我要分配的變量是固定的數據類型,但要分配的值是對象。我需要將它轉換爲正確的數據類型才能真正分配給它。 –

0

但我認爲你根本無法做到這一點,你可以使用反射來寫一個方法:

var test = variable.ConvertIt(); 

凡ConvertIt,與反思,可以在運行時和返回轉換的變量一個動態的。但是現在你如何使用測試變量?

對不起,我的壞壞壞英語。

+0

感謝您的回覆。但我仍然無法得到它是如何編碼看起來像是一個對象具有額外的功能。能給我看看麼? –

+0

您可以通過your_type.GetMethods(BindingFlags .... ecc)枚舉Object類型的所有方法 – alfdev

0

這可能看起來很奇特,但是你的問題(不想用if-else)首先是獨特的。這似乎不可能有任何其他方式。數據類型的創建是因爲您不能僅僅使用變量來處理各種數據。這不僅對程序員而且對編譯器也是一個問題。

try 
{ 
    int a = convert.toint32(x); 
    // Process a; 
} 
catch(Exception e) 
{ 
    try 
    { 
     string b = convert.tostring(x); 
     //Process b; 
    } 
    catch(Exception ex) 
    { 
     // and so on... 
    } 
} 

此外,這使用Convert.To__,你想要的。

相關問題