对方法返回结果的封装。举一个例子:一个方法对数据库进行操作,操作成功返回true,操作失败返回false,这个返回值类型用bool既可以搞定。
但是,更进一步,现在设计到用户权限的问题,操作成功返回true,操作失败返回false,没有权限返回NotPermission,为了实现这个效果,我写了一个枚举类型,其中3个值:true,false,NotPermission。
以上的情况我都可以实现。但是如果这个方法本来返回值不是bool类型,而是一个具体的string或者int或者一个类,这个就无法通过枚举来是实现了。请问这样的情况怎么实现?
谢谢!

解决方案 »

  1.   

    int 可以返回任意整数啊 0,1,3,4,5,6
    string 可以返回错误信息 或者 字符串 "0","1","2","3"
    类 可以返回任何类
      

  2.   

    可以返回interface  让实现interface的类决定返回的数据 是什么就是什么
      

  3.   

    string或者int都可以Parser或转换为enum...有什么问题?
      

  4.   

    throw new NotPermissionException();
      

  5.   

    返回int型,通过枚举取值
    public enum Status { NotPermission,Permission };
    public static string GetStatusName(string index)
    {
                return Enum.GetName(typeof(Status), int.Parse(index));
    }
      

  6.   

    我看jive论坛源代码里面是这样做的,抛异常。我总觉得这样的做法不妥,大家怎么看。
      

  7.   


             定义一个抽象类 RetValue 设为函数的返回值类型;
             派生出各种实体返回类型.
             然后得到的返回值是什么类型就是什么类型(列如可以通过is)
      

  8.   

    不知道是你没理解我的意思,还是我没有理解你的意思。这位前辈,谢谢。你可能没理解我的意思。
    举个例子,一个方法不考虑权限的情况下返回类ClassResult,但是现在这个方法要考虑到权限问题,返回结果是ClassResult或者没有权限,这个用枚举肯定实现不了。(如果本来是返回bool类型的话,可以用枚举实现,enum:true,false,NotPermission)。我觉得这位前辈的方法是目前看来最好的,不知道有没有更加好的。这种方法其实应该和返回父类是一样的效果吧!
      

  9.   

    最简单的方法:方法的返回值为object,接收的时候再把它转换成具体的对象. 
      

  10.   

    也是返回父类。和返回接口是一样的吧!
    返回值为父类,得到这个返回值以后,怎么判断他到底是哪个子类呢?ClassResult和NotPermission都是object的子类吧,怎么判断这个object是ClassResult还是NotPermission呢?
      

  11.   

    一个方法返回类型为object。
    具体代码是:如果没有权限,则返回NotPermission;有权限,那么返回结果ClassResult。NotPermission和ClassResult都是我写的类。public object f()
    {
        if(没有权限)
        {
            return NotPermission;
        }
        else
        {
            ClassResult = .....;
            return ClassResult;
        }
    }object o = f();
    得到这个o以后,我怎么判断这个o到底是NotPermission还是ClassResult?
      

  12.   

    class Result
    {
    public int ex = 0;
    public string Value = null;
    public Result(int ex){this.ex = ex;}
    public Result(string value){this.Value = value;}
    }public Result f()
    {
        if(没有权限)
        {
            return new Result(Consts.EX_NotPermission);
        }
        else
        {
            ClassResult = .....;
            return new Result(ClassResult);
        }
    }
      

  13.   

    对于这类看似需要枚举来实现的量, 传输过程中, 直接使用整形最方便,两头可以封装成 enum
      

  14.   

    直接返回一个对象不就行了class RsponseResult
    {
         public bool IsSuccess;
         public string returnCode;
         public String Description;
         ……
    }
      

  15.   


    用IS 可以判断,(object is ClassResult)ClassResult else NotPermission不过感觉你上面说的有点拖裤子放屁的感觉有必要这么麻烦