2017-04-14 51 views
2

我有一個進料來其泛型Ť基於解析器不同的屬性序列化爲逗號分隔值的字符串中的不同性質

feed = "[{"HIGH", "[235.76, 235.96, 235.97]"}, 
     {"LOW", "[235.76, 235.96, 235.97'"}, 
     {"DATE", "[20170410-10:21:34, 20170410-10:31:34, 20170410-10:43:34, 20170410-10:59:34]" } ..... 
     ]" 

我有業務需要創建一個實體出這種含不同特性的用於每個高/低/日期等現在「高」和低將是雙重的,而日期將是dateTime類型。 我分裂每個標籤後面的字符串,然後解析每個值到相應的屬性。

但是,由於該屬性的數據類型不同,我需要每種類型的解析函數。

private void GetFeedData(string[] data, List<int> field) 
    { 
     for (int i = 0; i < data.Length; i++) 
     { 
      **int fieldValue = int.Parse(data[i]);** 
      field.Add(fieldValue); 
     } 
    } 

我已經結束了與不同的功能,一個是專門針對每種數據類型,在只是解析fieldValue方法

我想要做這樣的事情不同,但是這似乎沒有不得到支持。

private void GetFeedData<T>(string[] data, List<T> field) where T: struct 
    { 
     for (int i = 0; i < data.Length; i++) 
     { 
      T fieldValue = (T)(data[i]); 
      field.Add(fieldValue); 
     } 
    } 

這將是所有類型的單一方法,這將是一個更容易。不知道如何做到這一點..請幫助

+0

使用泛型不會讓您避免必須知道類型,它只是幫助您避免爲每種類型重複相同的邏輯一次。因此,舉個例子,這個調用將看起來像這樣:'GetFeedData (feed,parsedValues);'並且它仍然會嘗試將每個值解析爲一個double值,它仍然會失敗。我認爲你將不得不檢查數值並確定類型。 –

回答

0

試試這個,但我認爲你的例子在語法上不正確。

private IList<T> GetFeedData<T>(string[] data) 
{ 
    List<T> field = new List<T>(); 

    for (int i = 0; i < data.Length; i++) 
    { 
     T fieldValue = (T)(Convert.ChangeType(data[i], typeof(T))); 
     field.Add(fieldValue); 
    } 

    return field; 
} 
+0

這仍然不能解決具有不同類型數據的問題。看到我對OP的評論。 –

+0

這工作完美最大。非常感謝。我已經能夠調用這個int/string/double/datetime – Nitin