首页 新闻 会员 周边

新手问题,关于一个方法可能返回不同的类型。

0
悬赏园豆:10 [已解决问题] 解决于 2011-10-26 16:55

加入我有一个方法,如果中间有错误就返回一个错误码(int),没错的话就返回具体的实体类型。

拿注册用户来举例

public ?? Register(...)
{
    if(用户名已存在)
        return 1;
    if(xxxx)
        return 2;
    ...
    return 注册成功的用户;
}

我想请教一下大家都是如何做的?似乎可以用out关键字,可是这样我感觉方法签名和调用就很麻烦了

wdwwtzy的主页 wdwwtzy | 初学一级 | 园豆:114
提问于:2010-11-22 11:44
< >
分享
最佳答案
0

首先,你的返回肯定是要做判断的。

所以,你一次返回不同的类型,就没有意义。

如 public object A(){}

收获园豆:2
小彬 | 小虾三级 |园豆:947 | 2010-11-22 13:31
public object A() { if(xx0) return 0; if(xx1) return "00"; ... return "成功"; } 调用: object o = A(); if(o is int) {...} if(o == "00") {...} ... 那么,最好还是返回一个固定的类型。 可以这样做: class A { public bool Register(string name) { ...//处理 RegisteredNo = "";//成功,设置已注册的名字 } public string RegisteredNo{get;private set;} } 调用时, A a = new A(); if(a.Regiser("abc")){ MessageBox.Show("注册号是"+a.RegisteredNo); }
小彬 | 园豆:947 (小虾三级) | 2010-11-22 13:37
格式好乱。 大体意思是,在方法 Register()里,只返回成功与失败,在Register所在的类中,添加一个属性,指示你需要获得的值
小彬 | 园豆:947 (小虾三级) | 2010-11-22 13:38
呃,是,有很多种方法可以解决,我就想问一下大家的经验是如何做呢,我认为这种情况会很常遇到吧
wdwwtzy | 园豆:114 (初学一级) | 2010-11-22 15:50
其他回答(6)
0

object 类型

收获园豆:1
忧愁 | 园豆:2 (初学一级) | 2010-11-22 11:58
object还要转换,好麻烦,而且性能有损失吧?
支持(0) 反对(0) wdwwtzy | 园豆:114 (初学一级) | 2010-11-22 12:06
0

用户注册用Enum表示。一般用泛型。由于泛型不可以多态,如果需要多态我会用object代替,不过不建议用。

收获园豆:2
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-22 12:05
错误码可以用enum,可是我希望没错的时候返回一个用户实体,这个要怎么做?
支持(0) 反对(0) wdwwtzy | 园豆:114 (初学一级) | 2010-11-22 12:07
就是想请教一下大家都是如何做的,这种情况应该很常见吧?
支持(0) 反对(0) wdwwtzy | 园豆:114 (初学一级) | 2010-11-22 12:08
不会这样做的,否则你前台代码应该怎样写呢?就算返回object,你也要进行类型比较,写起来一点都不简洁。
支持(0) 反对(0) 沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-22 12:49
0

如果出现这样的方法,那就得重构,一个方法一个职责。

收获园豆:2
Astar | 园豆:40805 (高人七级) | 2010-11-22 13:15
0

看吧,object可以,或者你给予4.0开发的话,可以用dynamic

收获园豆:1
MarcoRui | 园豆:5 (初学一级) | 2010-11-22 13:51
呃,是,有很多种方法可以解决,我就想问一下大家的经验是如何做呢,我认为这种情况会很常遇到吧
支持(0) 反对(0) wdwwtzy | 园豆:114 (初学一级) | 2010-11-22 15:49
就你这个例子,建议这样做: public string(或用户对象 UserInfo) Register(string _UserName) { if(用户名已存在) throw new Exception("该用户已存在"); if(xxxx) throw new Exception("XXXXX"); ... return string(或用户对象UserInfo); } 除正常情况外,其他建议通过抛出异常,在调用方法处捕获的方式来处理。当然了,这里只是举例,实际应用中,建议自己定义好相关的自定义异常信息。
支持(0) 反对(0) MarcoRui | 园豆:5 (初学一级) | 2010-11-22 21:53
0

string

收获园豆:1
慧☆星 | 园豆:5640 (大侠五级) | 2010-11-22 15:00
呃,是,有很多种方法可以解决,我就想问一下大家的经验是如何做呢,我认为这种情况会很常遇到吧
支持(0) 反对(0) wdwwtzy | 园豆:114 (初学一级) | 2010-11-22 15:49
0

返回一个自定义类型,比如

struct a

{

int 111,

string 222,

bool 333

}

你到时候想要那个取那个的值就好了呗!

收获园豆:1
茂茂 | 园豆:2892 (老鸟四级) | 2010-11-22 15:47
呃,是,有很多种方法可以解决,我就想问一下大家的经验是如何做呢,我认为这种情况会很常遇到吧
支持(0) 反对(0) wdwwtzy | 园豆:114 (初学一级) | 2010-11-22 15:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册