gpt4 book ai didi

exception - 返回什么?错误字符串、带有错误字符串输出的 Bool 或带有异常的 Void

转载 作者:行者123 更新时间:2023-12-03 22:28:59 25 4
gpt4 key购买 nike

我大部分时间都花在 C# 上,并试图找出处理异常的最佳做法,并将错误消息从被调用方法干净地返回给调用方法。

例如,这里是一些 ActiveDirectory 身份验证代码。 请将此方法想象成类的一部分(而不仅仅是一个独立的函数。)

bool IsUserAuthenticated(string domain, string user, string pass, out errStr)
{
bool authentic = false;
try
{
// Instantiate Directory Entry object
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, user, pass);

// Force connection over network to authenticate
object nativeObject = entry.NativeObject;

// No exception thrown? We must be good, then.
authentic = true;
}
catch (Exception e) { errStr = e.Message().ToString(); }
return authentic;
}

这样做的好处是可以将明确的"is"或“否”嵌入到 If-Then-Else 语句中。缺点是它还需要使用该方法的人提供一个字符串来取回错误(如果有的话)。

我想我可以用减去“out errStr”的相同参数重载此方法,但忽略错误似乎是个坏主意,因为可能有很多原因导致这种失败...

或者,我可以编写一个返回错误字符串的方法(而不是使用“out errStr”),其中返回的空字符串表示用户已通过身份验证。

string AuthenticateUser(string domain, string user, string pass)
{
string errStr = "";
try
{
// Instantiate Directory Entry object
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, user, pass);

// Force connection over network to authenticate
object nativeObject = entry.NativeObject;
}
catch (Exception e) { errStr = e.Message().ToString(); }
return errStr;
}

但这似乎是一种“弱”的做事方式。

或者我应该让我的方法“无效”并且不处理异常以便它被传递回调用函数吗?

void AuthenticateUser(string domain, string user, string pass)
{
// Instantiate Directory Entry object
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, user, pass);

// Force connection over network to authenticate
object nativeObject = entry.NativeObject;
}

这对我来说似乎是最理智的(出于某种原因)。然而与此同时,将这两行包装起来比在我需要验证的任何地方键入这两行的唯一真正优势是我不需要包含“LDAP://”字符串。这种方法的缺点是用户必须将此方法放在 try-catch block 中。

想法?

还有其他我没有想到的方法吗?

最佳答案

没有“一刀切”的说法。如果您返回一个标志,则可以轻松地在 if() 和循环中使用方法。异常总是需要大量样板代码。如果您只想要一个可以显示给用户的字符串(例如,在 Web UI 中),返回错误字符串(或 null 表示“无错误”)也很好。

但大多数时候,我会抛出异常(在 Java 中是 RuntimeException 的子类),因为这允许我返回有关错误的多个信息(例如:哪个文件导致了错误?哪一行/哪一列?我在做什么?表单中的哪个字段应标记为非法?等等)。

在你的情况下,你不能在你的方法中处理异常,所以你不应该捕获它。只有在您可以采取措施时才捕获它。

关于exception - 返回什么?错误字符串、带有错误字符串输出的 Bool 或带有异常的 Void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com