我正在做一些解析用戶輸入,在這裏我需要解析應該是某些類型的參數數組。LINQ表達式使用不同的對象類型創建一個數組
在解析的時候,我不知道每個參數應該是哪個類型,但它可以被評估爲任何類型。所以,我決定暫時將它們存儲在一個對象數組中。但是,當我嘗試做這樣的事情:
NewArrayExpression returnValue = Expression.NewArrayInit(typeof(object), expressionList);
我得到以下異常:類型「System.Int32」的表達式不能用於初始化類型的數組「System.Object的」。
也就是說,我猜想,因爲沒有隱式拳擊正在發生。所以我自己裝箱:
expressionList.Add(Expression.TypeAs(expression, typeof(object))); or
expressionList.Add(Expression.Convert(expression, typeof(object)));
到目前爲止很好:我得到了一個數組中的各種類型的對象列表。
但是,當我終於得到想要的類型,我嘗試將所有從上數組中的值的那種類型(可以說是類型爲usualy一個int),我把它轉換:
Expression.Convert(expr, typeof(int)); or
Expression.Unbox(expr, typeof(int));
這是當expr是actualy一個字符串「AAAAA」這兩個命令的調試視圖:
(System.Int32)((System.Object)"aaaaa")
現在,這裏存在我的問題:這會不會拋出異常。但是當表達式最終編譯完成時。我的意思是,字符串不是int。
也許這真的不應該拋出異常,我不知道。但這對我不起作用。
這有沒有辦法解決?
編輯:的代碼看起來是這樣的:
static Expression InArguments(ParameterExpression pe, string[] arguments)
{
List<Expression> listaExpr = new List<Expression>();
foreach (string s in arguments)
{
Expression expression = Complete(pe, s); // evaluate argument
// listaExpr.Add(Expression.Convert(expression, typeof(object)));
}
return Expression.NewArrayInit(typeof(object), listaExpr);
}
爲什麼你認爲你需要的對象存儲在一個數組?您能否展示整個表達式的示例,尤其是如何使用數組? – svick 2012-03-11 19:15:35
那麼,我想模仿SQL IN操作符。用戶應該輸入如下內容: Item.Code IN [1,2,3]或Partner.Name IN [「aa」,「bb」]其中,代碼將被動態評估爲int,Name將評估爲字符串。 但是,這是允許的:Item.Code IN [1,2,Partner.GetTopItem()] – 2012-03-11 19:27:04
所以,我需要評估IN運算符的所有參數,它可以導致簡單類型(int,string,decimal),但也可能導致我的模型中的任何類型,或者它們的集合。之後,我將它們轉換爲左操作數的類型。我不知道,也許我太過於複雜 – 2012-03-11 19:36:50