c# - 检查引用参数值或返回 bool 值?

标签 c# .net methods pass-by-reference

我正在使用具有以下签名的方法:

public static bool TryAuthenticate(string userName, string password, 
    string domainName, out AuthenticationFailure authenticationFailure)

该方法声明:bool authenticated = false; 然后继续验证用户。

每当 authenticated 设置为 true 或 false 时,authenticationFailure 将设置为 AuthenticationFailure.FailureAuthenticationFailure.Success 相应地。

所以基本上我可以使用 authenticationFailure 或方法的返回值来检查结果。然而,在同一方法中使用这两种方法似乎毫无意义地违反了 DRY。

澄清一下,方法中的任何其他地方都没有使用 authenticationFailure,因此它看起来完全是多余的。

目前我正在这样做:

public static bool IsValidLDAPUser(string username, string password, string domain)
{
    var authenticationStatus = new AuthenticationFailure();   
    if (ActiveDirectoryAuthenticationService.TryAuthenticate(username, password, domain, out authenticationStatus)) 
        return true;
    else return false;
}

但我可以这样做并得到一个类似的结果:

public static AuthenticationFailure IsValidLDAPUser(string username, string password, string domain)
{
    var authenticationStatus = new AuthenticationFailure();   
    ActiveDirectoryAuthenticationService.TryAuthenticate(username, password, domain, out authenticationStatus)
    return authenticationStatus;
}
  • 为什么要有一个与返回值做同样事情的引用参数?
  • 我应该使用哪个来检查结果,它有什么不同吗?
  • 这只是错误代码的情况还是我没有捕获要点?

提前致谢!

最佳答案

通常有比成功或失败更多的错误代码。也许此方法的设计者会为所有不同的故障类型添加更多枚举。

有时,也有不止一种成功类型——例如HTTP 在 200 和 300 block 中有很多返回码,在某种程度上都被认为是成功的。因此,bool 通常会告诉您它是否成功,而 enum 会提供更准确的信息。

有很多方法可以做到这一点,这个是不寻常的,但如果他们计划添加更多代码,则不反对 DRY。

另一种方法是仅封装到具有枚举和 IsSuccess 属性的 Result 类中。您甚至可以提供到 bool 的转换,以使其易于在 if 语句中使用。

关于c# - 检查引用参数值或返回 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3619691/

相关文章:

c# - 对象初始值设定项、非公共(public)子项和嵌套初始化

.NET 的 Version 类的 Java 等价物?

.net - VS2010 嵌套的 msi 安装程序

java - 从Java方法返回后如何访问返回数据

c# - 如何在C#中生成一个总共8位的随机数? (4个整数,4个小数部分)

c# - 函数输出错误值

c# - 如何使用 LaunchUriForResultAsync 在全屏模式下启动另一个应用程序?

c# - 为泛型类实现 IComparable<T> 接口(interface)以比较类型 T

java - 声明接口(interface)方法仅允许实现的类

java - 在 Java 中全局化输入变量