基于泛型T的解析器,用于字符串中的不同属性

时间:2017-04-14 15:42:49

标签: c# generics refactoring

我有一个Feed,它具有序列化为逗号分隔值的不同属性

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]" }  .....
        ]"

我有业务需要创建一个实体,其中包含HIGH / LOW / Date等每个的不同属性。现在"高"和Low将是double,而Date将是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);
        }
    }

这将是所有类型的单一方法,这将更容易。不知道怎么做到这一点..请帮忙

1 个答案:

答案 0 :(得分:2)

试试这个,但我认为你的例子在语法上不正确。

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;
}