[英]Binary Expression Class throws Invalid Operation Exception on Comparison Operators
我正在修改一個開源程序來為 Silverlight 中的數據網格創建一個通用過濾器。 class 的代碼如下所示。
public PropertyData Property { get; set; }
public FilterOperatorType FilterOperator { get; set; }
public string FilterValue { get; set; }
public Expression GetExpression<T>(ParameterExpression pe)
{
if (Property == null || Property.PropertyName == null)
return null;
PropertyInfo prop = typeof(T).GetProperty(Property.PropertyName);
Expression left = Expression.Property(pe, prop);
Expression right = null;
switch (prop.PropertyType.Name)
{
case "String":
right = Expression.Constant(FilterValue);
break;
case "Int32":
int val;
int.TryParse(FilterValue, out val);
right = Expression.Constant(val);
break;
case "Int64":
int.TryParse(FilterValue, out val);
Convert.ToInt32(val); //does not work
right = Expression.Constant(val);
break;
case "DateTime":
DateTime dt;
DateTime.TryParse(FilterValue, out dt);
right = Expression.Constant(dt);
break;
}
switch (FilterOperator)
{
case FilterOperatorType.Equal:
return Expression.Equal(left, right);
case FilterOperatorType.GreaterThan:
return Expression.GreaterThan(left, right);
case FilterOperatorType.GreaterThanOrEqual:
return Expression.GreaterThanOrEqual(left, right);
case FilterOperatorType.LessThan:
return Expression.LessThan(left, right);
case FilterOperatorType.LessThanOrEqual:
return Expression.LessThanOrEqual(left, right);
case FilterOperatorType.NotEqual:
return Expression.NotEqual(left, right);
}
return null;
}
}
每當我嘗試使用 integer 進行過濾時,我都會收到一個 InvalidOperationException 狀態:未為“System.Int64”和“System.Int32”類型定義二元運算符 Equal。
我理解為什么會拋出這個異常,但是在這個代碼的示例程序中我沒有得到任何異常,因為用戶輸入的 integer 是 Int32 類型,而在我的應用程序中它是 Int64。 有人對如何解決這個問題有任何想法嗎?
您需要將輸入解析為long
而不是int
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.