2016-06-10 24 views
0

I型有以下方法:解析字符串在通用

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,浮动,双,字符串,布尔...

如何做到这一点?

+0

怎么办_what_,**完全**?你能举一个你没有仿制药想要做什么的例子吗?你如何“解析”一个字符串到一个类型(我假设你是指一个类型的实例)? – CodeCaster

+0

很确定他希望将“value1,value2,value3”解析到任何类型“P”的3个实例中。除非'P'被过滤到支持某种'Parse'方法的类,否则不确定这是否可能。 –

+0

你甚至没有使用你的一半参数。 – itsme86

回答

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(); 
+0

如果它不可兑换会怎样?我能捕捉到那个例外吗? –

+0

使用yield时,转换不会发生,直到使用该值。当它被使用,如果它不能转换它会抛出一个'System.FormatException' –

+0

对不起,SO变得有趣,并不意味着评论和downvote,都恢复:D – leppie