我有一个UtilityMethod,它根据查找返回一个字符串。
public static string UtilityMethod(int id)
{
var result = MyListOfThings.FirstOrDefault(x=>x.ThingId == id);
if (result == null)
{
// throw error here
}
return result.ThingName;
}
我的问题是,在这里抛出错误是否正确?我该如何抛出错误。该错误应该是描述性的,因此它准确地表明了应该做什么以便修复。
答案 0 :(得分:0)
我想你的意思是抛出异常?
通常情况下,如果您的计划结果是可以预测或经常发生的事情,您不应该抛出异常。
而是使用错误代码(0表示成功,1,2,3表示不同类型的错误)
答案 1 :(得分:0)
如果您正在编写可以抛出异常的库方法,或者更具体地说,编写一个遍及其代码库的库会针对不同的情况抛出相同的异常(例如Exception
或LibraryException
),您可能希望在例外中包含错误编号:
public class LibraryException : Exception
{
public int ErrorCode { get; private set; }
public LibraryException(int errorCode, string message)
: base(message)
{
ErrorCode = errorCode;
}
}
通过这种方式,您的GUI代码可以捕获此异常,并将错误号转换为用户友好(本地化)的错误消息 - 无需在库中进行本地化或用户友好性。
答案 2 :(得分:0)
问题是,不在存储库中找到匹配的项目例外?意思是,期望是否找到了一个项目,或者它是否代表程序中的错误或违反了假设?如果不是例外,那么返回null
将意味着“没有符合您标准的对象”,然后调用者可以决定从那里做什么。
抛出异常将允许您包含一条消息,但除了找不到某个项目之外没有其他信息,因此它不会提供调用者不知道的任何信息,并会增加开销创建并抛出调用者必须处理的异常。
错误应该是描述性的,因此它确切地表明了为了解决
应该做些什么
有什么可以解决的?您查找具有给定id
的项目,如果找不到,则返回null
。除了更友好的错误之外,我没有看到抛出异常的任何好处,但是您可以记录该行为,以便调用者明白null
返回值的含义。
答案 3 :(得分:0)
你想要处理什么情况?你的清单可以是空的吗?别名可以为空吗?
如果列表不为空并且匹配id为Thing
的对象为空ThingAlias
,则会引发错误。
如果您的列表为空,FirstOrDefault
将返回null
,您将在方法的第一行获得NullReferenceException
。
根据您的应用程序,您可以执行以下某些操作:
Thing
对象,例如MyListOfThings.DefaultIfEmpty(new Thing(default_params).First(t => t.ThingId == id)
,