如何在c#中有效引用字符串?

时间:2013-05-11 10:01:26

标签: c# silverlight windows-phone

我在项目目标Windows Phone 7.5及以上版本上工作。

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

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

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

有近90个错误。

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

2 个答案:

答案 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),因为所有数据都在快速内存中,并且集合中的元素数量很少。