如何添加一个将类引用数据返回到c#类的函数?

时间:2012-05-30 13:34:36

标签: c#

我有以下课程:

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")

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

5 个答案:

答案 0 :(得分:5)

这可能不是你想要的,但我会使用字符串来字典。

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

例如:

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

答案 1 :(得分: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.Object已经有一个名为GetType的方法,因此您可能想要一个更具描述性的名称。

答案 2 :(得分:1)

似乎你需要将枚举与扩展方法结合起来......

e.g。

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

答案 3 :(得分: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"];

答案 4 :(得分:1)

您可以定义一个类似于字符串...

的类

然后,您可以使用所需的内容值定义枚举。

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

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

使用这种方法你不需要字典而你甚至不需要枚举,因为你会在Content类中声明const readonly属性,例如public static readonly Type0 = "00";

这实际上比使用类型安全枚举模式少,尽管它类似,它给你的是能够声明实常数的好处。