我有以下方法:
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 ...
怎么做?
答案 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();