如何在C#方法中返回对象和操作的结果

时间:2014-05-07 06:37:33

标签: c# .net-4.0

我正在使用.NET Framework 4.0开发一个C#库。

我有一个方法必须返回一个对象和该操作的结果。在我的情况下,它是一个登录方法,我用作参数用户名和密码,我必须返回一个User类的实例和登录操作的结果:

  • 用户名或密码无效。
  • 用户已锁定。
  • 用户已停用。

我想,我可以这样做:

public LoginResult DoLogin(string userName, string password, out User user)

这是对的吗?还有另一种方法吗?也许我可以使用异常而不是返回LoginResult值。

5 个答案:

答案 0 :(得分:2)

这似乎是一种合适的方式,因为像TryParse这样的一些框架功能就是这样做的。

答案 1 :(得分:1)

如果没有为用户锁定用户禁用等状态分配更多信息,您所描述的内容是合适的方式。

如果有,我想建议另一种模式:

创建一个抽象类LoginResultInfo,它具有类型为LoginResult的抽象只读属性,它将返回“错误代码”。

然后,您可以从该类派生每个所需错误代码的子类。这些子类中的每一个都会覆盖LoginResult属性以返回相应的错误代码,每个子类都包含相关的附加字段,例如,在成功登录的情况下为User实例,最初由管理员解释用户被锁定的原因,或用户禁用其帐户的时间戳等。

使用LoginResult属性,您仍然可以方便地切换不同的错误代码,同时,您不提供有时仅使用的任何字段,而是您拥有阶级结构具体而且适合当前的情况。

答案 2 :(得分:1)

我建议将LoginResult作为User类的属性,并从User方法返回DoLogin类对象,而不是像输出参数那样返回它。 在填写LoginResult对象时,您始终可以填写User属性,因为拥有User类意味着用户instanceauthenticated或{{ 1}}乘以unauthenticated

的值
LoginResult

答案 3 :(得分:1)

根据您的要求,您建议的方法是最合适的方法 还有一点,我想强调一下,

  1. 通过抛出异常来决定程序的流程并不是一个好习惯。
  2. 我心中浮现的其他想法是,

    1. 生成具有属性并返回该对象的类
    2. 返回KeyValuePair<LoginResult, User >对象

答案 4 :(得分:0)

您可以使用

Tuple<User, LoginResult>