2017-04-14 34 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