2016-06-10 58 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