Microsoft.JScript.LateBinding.DeleteMember C# (CSharp) Method

DeleteMember() public static method

public static DeleteMember ( Object obj, String name ) : bool
obj Object
name String
return bool
      public static bool DeleteMember(Object obj, String name){
        if (name == null || obj == null) return false;
        if (obj is ScriptObject)
          return ((ScriptObject)obj).DeleteMember(name);
        if (obj is IExpando)
          try{
            IExpando eob = (IExpando)obj;
            MemberInfo[] members = eob.GetMember(name, BindingFlags.Instance|BindingFlags.Public);
            MemberInfo member = LateBinding.SelectMember(members);
            if (member != null){
              eob.RemoveMember(member);
              return true;
            }
            return false;
          }catch{
            return false;
          }
        if (obj is IDictionary){
          IDictionary dict = (IDictionary)obj;
          if (dict.Contains(name)){
            dict.Remove(name);
            return true;
          }
          return false;
        }
        Type obType = obj.GetType();
        MethodInfo deleteOp = TypeReflector.GetTypeReflectorFor(obType).GetMethod(
          "op_Delete", BindingFlags.ExactBinding|BindingFlags.Public|BindingFlags.Static, null, new Type[]{obType, typeof(Object[])}, null);
        if (deleteOp == null || (deleteOp.Attributes & MethodAttributes.SpecialName) == 0 || deleteOp.ReturnType != typeof(Boolean))
          return false; //This is in the spirit of the spec, but not backwards compatible with JS5. The latter throws an exception.
        else
          return (bool)deleteOp.Invoke(null, new Object[]{obj, new Object[]{name}});
      }

Usage Example

示例#1
0
文件: jsobject.cs 项目: ydunk/masters
        internal override bool DeleteMember(String name)
        {
            FieldInfo field = (FieldInfo)this.NameTable[name];

            if (field != null)
            {
                if (field is JSExpandoField)
                {
                    field.SetValue(this, Missing.Value);
                    this.name_table.Remove(name);
                    this.field_table.Remove(field);
                    return(true);
                }
                else if (field is JSPrototypeField)
                {
                    field.SetValue(this, Missing.Value);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else if (this.parent != null)
            {
                return(LateBinding.DeleteMember(this.parent, name));
            }
            else
            {
                return(false);
            }
        }
All Usage Examples Of Microsoft.JScript.LateBinding::DeleteMember