Sir*_*rne 4 c# lambda expression
我想创建Assert类似于下面的代码的自己的方法,但它不起作用.
// Method Usage
Argument.Assert(() => Measurements.Count > 0);
// Method Implementation
public static void Assert(Expression<bool> expression)
{
  bool value = expression.Compile();
  if(!value)
  {
    throw new InvalidOperationException("Assert: " + expression.ToString() + " may not be false!");
  }
}
我在这做错了什么?错误是:'Error   1   Cannot convert lambda to an expression tree whose type argument 'bool' is not a delegate type'.
首先我有Expression<Func<bool>> expression,expression.Compile()()但这总是崩溃TargetInvocationException.
Expression<bool>由于T必须是委托类型,因此无效.
Expression<Func<bool>>是有效的,虽然我不确定为什么你喜欢这个简单Func<bool>.那是你的电话.
这应该工作
public static void Assert(Expression<Func<bool>> expression)
{
    if (!expression.Compile().Invoke())
    {
        throw new InvalidOperationException(String.Format("Assert: {0} may not be false!", expression.ToString()));
    }
}
| 归档时间: | 
 | 
| 查看次数: | 374 次 | 
| 最近记录: |