解析字符串以输入泛型

时间:2016-06-10 19:52:14

标签: c#

我有以下方法:

public static IQueryable<T> Where<T, P>(this IQueryable<T> source, Func<T, P> predicate, String filter) { 

  String[] values = _service.GetValues(filter);

}

变量值类似于:

String[] values = { "1", "2", "C" };

我需要将所有值解析为相同类型的P.因此,如果P的类型为int,那么它将失败,因为我无法将C解析为int。但是如果P将是String类型,那么它将通过,因为所有3个值都可以解析为String。

P的类型是基本的:int,datetime,float,double,string,boolean ...

怎么做?

1 个答案:

答案 0 :(得分:1)

您可以创建一种新方法来为您进行转换。

public IEnumerable<P> Parse<P>(string[] values) where P : IConvertable // Add constraint for some compile time notification errors
{
    foreach (var value in values)
    {
        yield return (P)Convert.ChangeType(value, typeof(P));
    }
}

如果您不想要新方法,另一个选择就是使用此行。

var convertedValues = values.Select(value => (P)Convert.ChangeType(value, typeof(P)));

在一行选项中,如果您在结尾添加.ToList(),它将在分配行进行所有转换,因此会导致异常立即抛出。

var convertedValues = values.Select(value => (P)Convert.ChangeType(value, typeof(P))).ToList();