Пример #1
0
        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));
            }
        }
Пример #2
0
 public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result)
 {
     result = new DynamicNullObject
     {
         IsExplicitNull = false
     };
     return(true);
 }
Пример #3
0
 public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
 {
     result = new DynamicNullObject
     {
         IsExplicitNull = false
     };
     return(true);
 }
Пример #4
0
 public override bool TryGetMember(GetMemberBinder binder, out object result)
 {
     result = new DynamicNullObject
     {
         IsExplicitNull = false
     };
     return(true);
 }
Пример #5
0
 public override bool TryGetMember(GetMemberBinder binder, out object result)
 {
     if (binder.Name == "HasValue")
     {
         result = false;
         return(true);
     }
     result = new DynamicNullObject
     {
         IsExplicitNull = false
     };
     return(true);
 }
Пример #6
0
        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);
        }