gpt4 book ai didi

c# - #if DEBUG 用于异常处理

转载 作者:太空狗 更新时间:2023-10-30 00:18:48 25 4
gpt4 key购买 nike

我有一个公共(public)方法 ChangeLanguage,它位于一个类库中,应该供不知道源代码是什么但知道它能做什么的其他人使用。

public string ChangeLanguage(string language) 
{
#if DEBUG
// Check if the new language is not null or an empty string.
language.ThrowArgumentNullExceptionIfNullOrEmpty("language", GetString("0x000000069"));
#else
if (string.IsNullOrEmpty(language))
language = _fallbackLanguage;
#endif
}

对我来说,检查 language 是否确实传递给方法看起来很明显,如果没有,则向开发人员抛出错误。虽然这是一个非常小的性能损失,但我认为最好不要抛出异常,而是在未提供语言时使用后备语言。

我想知道这是否是一个好的设计方法,我是否应该像这里一样在图书馆的其他地方继续使用它:

    _appResDicSource = Path.Combine("\\" + _projectName + ";component", _languagesDirectoryName, _fileBaseName + "_" + language + ".xaml");
_clsLibResDicSource = "\\Noru.Base;component\\Languages\\Language_" + language + ".xaml";

ResourceDictionary applicationResourceDictionary;
ResourceDictionary classLibraryResourceDictionary;

try { applicationResourceDictionary = new ResourceDictionary { Source = new Uri(_appResDicSource, UriKind.RelativeOrAbsolute) }; }
catch
{
#if DEBUG
throw new IOException(string.Format(GetString("1x00000006A"), _appResDicSource));
#else
return ChangeLanguage(_fallbackLanguage);
#endif
}
try { classLibraryResourceDictionary = new ResourceDictionary { Source = new Uri(_clsLibResDicSource, UriKind.RelativeOrAbsolute) }; }
catch
{
#if DEBUG
throw new IOException(string.Format(GetString("1x00000006B"), _clsLibResDicSource));
#else
return ChangeLanguage(_fallbackLanguage);
#endif
}

最佳答案

这取决于调用的语义,但我会考虑 Debug.Fail (如果未定义 DEBUG 将被消除):

public string ChangeLanguage(string language) 
{
if (string.IsNullOrEmpty(language))
{
Debug.Fail("language is NOK");
language = _fallbackLanguage;
}
}

问题在于,一方面,正如 @OndrejTucny@poke 所提到的,不同的构建配置具有不同的逻辑是不可取的。这是正确的。

但另一方面,在某些情况下,您不希望应用程序由于一个小错误而在现场崩溃。但是,如果您只是无条件地忽略该错误,即使在本地系统上也会降低检测到它的机会。

我认为没有通用的解决方案。通常,您可能最终决定抛出或不抛出、记录或不记录、添加断言或不添加断言,总是或有时。答案取决于具体情况。

关于c# - #if DEBUG 用于异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29746086/

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