我最近正在使用一些动态搜索表达式,当我尝试搜索多个日期/时间时遇到了一个问题。
我的SearchExpression构造函数类似于以下内容(为简便起见,省略了一些):
public SearchExpression(string propertyName,
ComparisonOperator comparisonOperator,
object value) {...}
和
public SearchExpression(string propertyName,
ComparisonOperator comparisonOperator,
object[] values,
BooleanOperator innerBooleanOperator) {...}
当通过以下操作时,这两种方法均应按预期工作:
弦乐
数字(或任何数字数据)
但是,在传递DateTime信息时,我开始遇到一些问题。
当我根据类型(DateTime,Numeric或String)输入所有数据时,我将所有数据分开并检查有效性,然后将它们存储到数组中以传递给正确的表达式,如下所示:
object[] stringParameters;
object[] numericalParameters;
DateTime[] dateParameters;
当我传递以上任何内容时,所有这些工作都可以进行,但DateTime参数数组除外。
因此,我的问题让我感到有些愚蠢,那就是为什么我可以将单个DateTime值作为对象传递,却不能将
DateTime[]
作为object[]
传递。例:
DateTime[] dateParameters;
//This works fine
new SearchExpression("DateTime", ComparisonOperator.Equals, dateParameters[0]);
//This fails to work
new SearchExpression("DateTime", ComparisonOperator.Equals, dateParameters,
BooleanOperator.Or);
最佳答案
这是Covariance
固有的问题,哪些数组不支持数组不支持值类型。
埃里克·利珀特(Eric Lippert)在here上有一篇很好的文章。
解
将方法签名更改为IEnumerable<object>
。