我正在使用.NET Framework 4.0开发一个C#库。
我有一个方法必须返回一个对象和该操作的结果。在我的情况下,它是一个登录方法,我用作参数用户名和密码,我必须返回一个User类的实例和登录操作的结果:
我想,我可以这样做:
public LoginResult DoLogin(string userName, string password, out User user)
这是对的吗?还有另一种方法吗?也许我可以使用异常而不是返回LoginResult
值。
答案 0 :(得分:2)
这似乎是一种合适的方式,因为像TryParse这样的一些框架功能就是这样做的。
答案 1 :(得分:1)
如果没有为用户锁定或用户禁用等状态分配更多信息,您所描述的内容是合适的方式。
如果有,我想建议另一种模式:
创建一个抽象类LoginResultInfo
,它具有类型为LoginResult
的抽象只读属性,它将返回“错误代码”。
然后,您可以从该类派生每个所需错误代码的子类。这些子类中的每一个都会覆盖LoginResult
属性以返回相应的错误代码,每个子类都包含相关的附加字段,例如,在成功登录的情况下为User
实例,最初由管理员解释用户被锁定的原因,或用户禁用其帐户的时间戳等。
使用LoginResult
属性,您仍然可以方便地切换不同的错误代码,同时,您不提供有时仅使用的任何字段,而是您拥有阶级结构具体而且适合当前的情况。
答案 2 :(得分:1)
我建议将LoginResult
作为User
类的属性,并从User
方法返回DoLogin
类对象,而不是像输出参数那样返回它。
在填写LoginResult
对象时,您始终可以填写User
属性,因为拥有User
类意味着用户instance
为authenticated
或{{ 1}}乘以unauthenticated
LoginResult
答案 3 :(得分:1)
根据您的要求,您建议的方法是最合适的方法 还有一点,我想强调一下,
我心中浮现的其他想法是,
KeyValuePair<LoginResult, User >
对象答案 4 :(得分:0)
您可以使用
Tuple<User, LoginResult>