2

我的项目目标是 Windows Phone 7.5 及更高版本。

我使用 Rest API 从服务器获取数据,当发生错误时,服务器会返回一条错误消息,消息 json 包含两部分,一部分是错误代码(int),一部分是错误消息(字符串)

我想要的是参考错误代码,并显示一个 DIY 错误消息(我不想使用来自服务器的错误消息)。

所以我要做的是声明一个静态字典,并将错误代码作为键,我的错误消息作为值。所以我可以很容易地参考这个消息。

有近 90 个错误。

有没有更好的方法来解决这个问题?它会通过我的操作导致任何性能问题吗?

4

2 回答 2

1

好吧,就我个人而言,我可能会将它们放在一些描述的文件中 - 您可以加载资源文件或自定义嵌入资源。这适用于 i18n,并使您的源代码充满而不是数据。

但是如果你真的想在代码中包含数据,你可以轻松地创建一个字典,其中包含在集合初始化程序中指定的值:

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
};
于 2013-05-11T10:04:08.623 回答
0

一旦你开始处理错误。下一步可能是简化显示的错误。您的用户可能不需要知道所有 90 种错误类型,而且这会增加对服务器的攻击。

您可以做的是将错误代码分组并仅显示一般信息(基于 fab 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),因为所有数据都在快速内存中,并且集合中的元素数量很少。

于 2013-05-11T10:16:16.287 回答