【发布时间】:2015-08-31 14:33:55
【问题描述】:
我希望能够写作
MyObject.IsNull(p => p.MyObjectProperty)
我认为这是可以通过表达来实现的。 我想以这种方式实现它:
public static void IsNull<T>(this T root, Expression<Func<T, object>> expression)
{
if (CheckIfNull<T>(expression))
{
throw new ArgumentNullException(GetName(expression));
}
}
private static string GetName<T>(Expression<Func<T, object>> expression)
{
return ((MemberExpression)expression.Body).Member.Name;
}
public static bool CheckIfNull<T>(Expression<Func<T, object>> expression)
{
Expression<Func<T, object>> obj = o => expression.Compile().Invoke(o);
return obj == null;
}
但它是不工作的接缝。 我该如何解决?
【问题讨论】:
-
您正在将
obj与null进行比较 - 它从来没有,因为您上面的一行正在为它分配一个 lambda 函数。插入检查obj(root) == null。除此之外,none 您的函数中的任何一个都不会返回true或false并且它们不应该编译。请检查您提供的代码 -
请告诉我们
MyObject.IsNull(p => p.MyObjectProperty)的行为应该是什么。如果MyObjectProperty是null,您似乎希望抛出一个异常,但是还有一个从未使用过的bool返回值。 -
刚刚用
void修复了bool。是的,我希望以防万一CheckIfNull<T>(expression) == true -
好吧,现在说得通了:你试过我的答案吗?这样能解决吗?