2014-02-26 50 views
0

我正在嘗試使用泛型方法。但是一個特定類型的對象存在一些問題,所以對於該特定類型,但由於類型不匹配而出現錯誤。我該如何糾正這一點?不同於定義的泛型類型的條件返回

private static T GetObjectFromFile<T>(string filename) 
     { 
      IsolatedStorageFile AppIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication(); 
      IsolatedStorageFileStream ISFileStream = AppIsolatedStorage.OpenFile(filename, System.IO.FileMode.Open); 
      byte[] buffer = new byte[ISFileStream.Length]; 
      ISFileStream.Read(buffer, 0, buffer.Length); 
      ISFileStream.Close(); 
      string data = Encoding.UTF8.GetString(buffer, 0, buffer.Length); 
      if (typeof(T) == typeof(MonitorBriefs)) 
      { 
       return JsonParser.ParseMonitorBrief(data);//this is incorrect statement 
      } 
      else 
      { 
       return JsonConvert.DeserializeObject<T>(data); 
      } 
     } 
+0

你需要轉換到'T'爲了滿足編譯器的要求的代碼:'回報( T)JsonParser.ParseMonitorBrief'由於類型檢查和我的假設,類型實際上是相同的,應該真的最終只是一種形式。 –

+0

@AdamHouldsworth已經嘗試過了,它說不能從MonitorBrief轉換到T – Ankit

+1

你可以總是先嚐試將對象轉換爲我想要的,但是如果你不得不求助於你的設計,到那種事情。 –

回答

0

不那麼漂亮,但試試這個:

private static T GetObjectFromFile<T>(string filename) 
    { 
     IsolatedStorageFile AppIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication(); 
     IsolatedStorageFileStream ISFileStream = AppIsolatedStorage.OpenFile(filename, System.IO.FileMode.Open); 
     byte[] buffer = new byte[ISFileStream.Length]; 
     ISFileStream.Read(buffer, 0, buffer.Length); 
     ISFileStream.Close(); 
     string data = Encoding.UTF8.GetString(buffer, 0, buffer.Length); 
     if (typeof(T) == typeof(MonitorBriefs)) 
     { 
      return (T)(object)JsonParser.ParseMonitorBrief(data);//this is incorrect statement 
     } 
     else 
     { 
      return JsonConvert.DeserializeObject<T>(data); 
     } 
    } 
0

不幸的是這是不可能與.NET。你可以移除這個方法之外的if語句,並將返回類型設置爲T.或者用戶一個包裝器對象,你可以在這裏設置兩種類型並返回它們。

它投射到一個對象不應該是一種選擇,因爲你需要將它轉換回在調用方法

+0

它不應該是一個選項,但它確實有效。它將任何投射問題移入運行時。 –