我在项目目标Windows Phone 7.5及以上版本上工作。
我使用Rest API从服务器获取数据,当发生错误时,服务器将返回一条错误消息,消息json包含2个部分,一部分是错误代码(int),一部分是错误消息(字符串)
我想要的是参考错误代码,并显示DIY错误消息(我不想使用来自服务器的错误消息)。
所以我所做的是声明一个静态字典,并将错误代码作为键,并将错误消息作为值。所以我可以轻松地参考这个消息。
有近90个错误。
有没有更好的方法来解决这个问题?它会通过我的工作导致任何性能问题吗?
答案 0 :(得分:1)
个人而言,我可能会将它们放在一些描述文件中 - 可以是资源文件,也可以是可以加载的自定义嵌入式资源。这适用于i18n,并保持源代码充满 source 而不是数据。
但是,如果确实想要在代码中包含数据,您可以轻松地创建一个包含集合初始值设定项中指定值的字典:
public static readonly Dictionary<int, string> ErrorMessages =
new Dictionary<int, string>
{
{ 0, "Your frobinator was jamified" },
{ 1, "The grigbottle could not be doxicked" },
{ 35, "Ouch! That hurt!" },
{ 14541, "The input was not palendromic" },
// etc
};
答案 1 :(得分:0)
一旦你的错误处理得以进行。下一步可能是简化显示的错误。您的用户可能不需要知道所有90种类型的错误,这会增加服务器上的攻击。
您可以做的是对错误代码进行分组并仅显示常规信息(基于工厂Jon的代码)
class Program
{
public static readonly Dictionary<IEnumerable<int>, string> ErrorMessages =
new Dictionary<IEnumerable<int>, string>
{
{ Enumerable.Range(0,10), "Your frobinator was jamified" },
{ Enumerable.Range(10,10), "The grigbottle could not be doxicked" },
{ Enumerable.Range(20,10), "Ouch! That hurt!" },
{ Enumerable.Range(30,10), "The input was not palendromic" },
// etc
};
static void Main(string[] args)
{
int error = 2;
string message = ErrorMessages
.Where(m => m.Key.Contains(error))
.FirstOrDefault().Value;
Console.WriteLine(message); // "Your frobinator was jamified"
}
}
此解决方案为O(N)
,而Jon为O(1)
。但是在您工作的规模上O(N) ~ O(1)
,因为所有数据都在快速内存中,并且集合中的元素数量很少。