public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { switch (binder.Name) { case "GetValueOrDefault": result = new DynamicNullObject { IsExplicitNull = true }; return(true); case "Count": result = 0; return(true); case "DefaultIfEmpty": result = new[] { new DynamicNullObject { IsExplicitNull = false } }; return(true); default: return(base.TryInvokeMember(binder, args, out result)); } }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { result = new DynamicNullObject { IsExplicitNull = false }; return(true); }
public override bool TryInvoke(InvokeBinder binder, object[] args, out object result) { result = new DynamicNullObject { IsExplicitNull = false }; return(true); }
public override bool TryGetMember(GetMemberBinder binder, out object result) { result = new DynamicNullObject { IsExplicitNull = false }; return(true); }
public override bool TryGetMember(GetMemberBinder binder, out object result) { if (binder.Name == "HasValue") { result = false; return(true); } result = new DynamicNullObject { IsExplicitNull = false }; return(true); }
public override bool TryBinaryOperation(BinaryOperationBinder binder, object arg, out object result) { switch (binder.Operation) { case ExpressionType.Equal: result = arg == null || arg is DynamicNullObject; break; case ExpressionType.NotEqual: result = arg != null && arg is DynamicNullObject == false; break; default: result = new DynamicNullObject(); break; } return(true); }