我有以下课程:
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")
根据建议将数据存储在字典中。
答案 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";
这实际上比使用类型安全枚举模式少,尽管它类似,它给你的是能够声明实常数的好处。