1

我有以下课程:

public class Content {
    public int Key { get; set; }
    public int Order { get; set; }
    public string Title { get; set; }
}

我有以下函数,它根据 id 返回内容类型代码。

protected string getType(string id) {
    switch(id.Substring(2, 2)) {
        case "00": return ("14");
        case "1F": return ("11");
        case "04": return ("10");
        case "05": return ("09");
        default: return ("99");
    }
}

尽管 id 不是内容类的一部分,但类和函数总是一起使用。

有什么方法可以让我把这个功能完全融入我的课堂吗?我正在考虑一个枚举或一些固定的东西,但是我对 C# 的了解还不足以让我知道如何做到这一点。我希望有人能给我和例子。

更新:

我喜欢以下建议:

public static readonly Dictionary<String, String> IdToType = 
    new Dictionary<string, string>
    {
        {"00", "14"},
        {"1F", "11"},
        {"04", "10"},
        {"05", "09"},
        //etc.
    };

但我不知道我怎么能把它融入我的课堂。有没有人可以告诉我?我想做的是写这样的东西:

Content.getType("00")

按照建议将数据存储在字典中。

4

5 回答 5

5

这可能不是您要查找的内容,但我会使用字符串到字符串字典。

如果你想让它成为你班级的公共静态成员,那可能就是你所追求的。

前任:

public static readonly Dictionary<String, String> IdToType = 
    new Dictionary<string, string>
    {
        {"00", "14"},
        {"1F", "11"},
        {"04", "10"},
        {"05", "09"},
        //etc.
    };
于 2012-05-30T13:45:16.477 回答
2

你在找这样的东西吗?

public class Content
{
    public int Key { get; set; }
    public int Order { get; set; }
    public string Title { get; set; }

    public static string getType(string id)
    {
        switch (id.Substring(2, 2))
        {
            case "00": return ("14");
            case "1F": return ("11");
            case "04": return ("10");
            case "05": return ("09");
            default: return ("99");
        }
    }
}

该方法可以像这样调用:Content.getType("00").


另外:按照 C# 的约定,方法名称应该是 Pascal 大小写的,所以你的方法名称应该是GetType. 您可能已经发现,在System.Objectcalled上已经有一个方法GetType,因此您可能想提出一个更具描述性的名称。

于 2012-05-30T13:39:52.093 回答
1

看来您需要将枚举与扩展方法结合起来......

例如

static string Default = "99";
public static readonly Dictionary<string, string> Cache = new Dictionary<string,string>(){
    {"00", "14"},
    {"1F", "11"},
    {"04", "10"},
    {"05", "09"},
    //etc
}
public static getType(Content this){
    if(Cache.ContainsKey(this.typeId)) return Cache[this.typeId];
    else return Default;
}
//Add other types as needed

或者查看这篇文章以获取 TypeSafe 枚举模式的示例:C# String enums

于 2012-05-30T13:54:02.897 回答
1

芽,

只是为了解释@DLH的答案:

public class Content 
{
 public int Key { get; set; }
 public int Order { get; set; }
 public string Title { get; set; }

 public static readonly Dictionary<String, String> getType = 
       new Dictionary<string, string>
 {
     {"00", "14"},
     {"1F", "11"},
     {"04", "10"},
    {"05", "09"},
    //etc.
 };
}

然后将允许您这样做:

string value = Content.getType["00"];
于 2012-05-30T14:44:11.637 回答
1

您可以定义一个与字符串可比的类...

然后,您可以使用您想要的内容值定义一个枚举。

然后,您可以添加运算符重载来处理字符串、int 或 long 等。

然后,您将为枚举类型添加运算符重载。

使用这种方法,您将不需要 Dictionary 并且您甚至不需要枚举,因为您将在 Content 类中声明 const readonly 属性,例如public static readonly Type0 = "00";

这实际上比使用类型安全枚举模式要少,尽管它是相似的,并且它为您提供了能够声明实常量的好处。

于 2012-05-30T15:15:49.037 回答