如何通过引用数据结构名称来访问其他字段

时间:2014-11-22 12:23:05

标签: c#

我想拥有数据结构,通过引用它的名称,我可以访问其他字段。

例如:

value1: "21", "value 1", "AAA"
value2: "23", "value 2", "BBB"
value3: "35", "value 3", "CCC"

我希望能够访问这样的数据结构:

MyStructure.value1 -- > return "value 1" and "AAA"

您更喜欢哪种数据结构? 谢谢你的帮助

3 个答案:

答案 0 :(得分:3)

根据您的评论,您希望以多种语言存储错误说明。不要在程序代码中嵌入人类可读的字符串,而是使用资源文件。我不会解释如何使用它们,相反,我会推荐您在线搜索“.net资源本地化”,以找到大量文章和教程。

为每种语言创建一个资源文件(给它一个合适的名称),然后将消息添加到文件中。我建议使用枚举作为键(从技术上讲,枚举的ToString()值将用作键,如下所示:

enum ErrorMessage {
    OutOfMemory,
    PEBCAK,
    IdTenTError,
    // etc...
}

public static class ResourceHelper {
     public static String GetMessage(ErrorMessage message) {
          String key = "ErrorMessage_" + message.ToString();
          return ResourceManager.GetString( key );
     }
}

您的英语(en-US)资源文件将包含以下内容:

ErrorMessage_OutOfMemory  "Out of memory"
ErrorMessage_PEBCAK      "er..."
ErrorMessage_IdTenTError "Who is writing these error messages?"

并重复其他语言,例如FR-FR:

ErrorMessage_OutOfMemory  "Manque de mémoire"
ErrorMessage_PEBCAK      "Problème existe entre chaise et le clavier"
ErrorMessage_IdTenTError "Moins on en dit mieux"

ResourceManager.GetString方法从Thread.CurrentThread.CurrentUICulture属性中选择要使用的语言。您可以使用GetString(String name, CultureInfo culture)重载来覆盖此选项以强制选择语言。

答案 1 :(得分:1)

试试这个msdn

    class Foo
    {
        public string Value { get; set; }
        public string OtherValue { get; set; }
    }

   var dictionary = new Dictionary<string, Foo>();
   dictionary.Add("21", new Foo { Value = "value 1", OtherValue = "AAA" });
   dictionary.Add("23", new Foo { Value = "value 2", OtherValue = "BBB" });
   dictionary.Add("35", new Foo { Value = "value 3", OtherValue = "CCC" })
   var foo = dictionary["21"]; 
   //foo.OtherValue 
   //foo.Value

答案 2 :(得分:1)

您想要将值映射到复杂对象。最好使用Dictionary进行。首先,您必须设计一个包含单个值的所有数据的类:

class ErrorInfo
{
    public ErrorInfo(string descriptionEN, string descriptionDE)
    {
        DescriptionEN = descriptionEN;
        DescriptionDE = descriptionDE;
    }

    public string DescriptionEN {get; private set;}
    public string DescriptionDE {get; private set;}
}

然后,您可以定义一个字典,该字典从错误代码映射到关联的ErrorInfo:

var dict = new Dictionar<string, ErrorInfo>();

您还必须填写字典:

dict.Add("1", new ErrorInfo("An error ocurred", "Ein Fehler ist aufgetreten"));
dict.Add("2", new ErrorInfo("Unknown error", "Unbekannter Fehler"));
// etc.

如果您只有错误代码,则获取错误信息很简单:

ErrorInfo info = dict["1"];

只需向ErrorInfo

添加更多属性,即可轻松扩展此方法