C# 如何创建列表并在C中查找值#

C# 如何创建列表并在C中查找值#,c#,C#,我想在C#中实现某种查找,但我不确定如何实现 我有一个变量,它的值可以在0到9之间。每个变量都有一个文本字符串 我想我需要列出一些清单 如果能举一个关于如何访问列表以及如何填充列表的简单示例,我将不胜感激 我尝试了以下方法: public static class RefData { public static Dictionary<int, string> dict = new Dictionary<int, string>(); dict.Add(0,

我想在C#中实现某种查找,但我不确定如何实现

我有一个变量,它的值可以在0到9之间。每个变量都有一个文本字符串

我想我需要列出一些清单

如果能举一个关于如何访问列表以及如何填充列表的简单示例,我将不胜感激

我尝试了以下方法:

public static class RefData
{
    public static Dictionary<int, string> dict = new Dictionary<int, string>();
    dict.Add(0, "This Text");
    dict.Add(3, "That Text");
    dict.Add(4, "More Text");
}
公共静态类RefData
{
公共静态字典dict=新字典();
添加(0,“本文本”);
添加第(3)条,“该文本”);
添加(4,“更多文本”);
}

但它会给出一条错误消息,说明“无法解析使用dict.Add的行上的符号dict

您正试图将代码放入类定义中。您需要在方法或静态构造函数中移动dict.Add()调用。例如:

public static class RefData
{
    public static Dictionary<int, string> dict = new Dictionary<int, string>();

    static Refdata() //this could also be: public static void PopulateDictionary()
    {
        dict.Add(0, "This Text");
        dict.Add(3, "That Text");
        dict.Add(4, "More Text"); 
    }
}
 Dictionary<int, string> dict = new Dictionary<int, string>()
您可以这样查找值:

 dict.Add(0, "This Text");
 dict.Add(3, "That Text");
 dict.Add(4, "More Text");
 string value = dict[3];  //returns "That Text"
如果字典中已存在密钥,则添加操作将失败。如中所示,此操作不能执行两次:

 dict.Add(3, "That Text");
 dict.Add(3, "More Text");
正如我之前所说,键(在本例中是int)必须是唯一的

 dict[3] = "New Text"

泛型词典最棒的地方在于它可以容纳你想要的任何类型!词典的定义是
dictionary
,你可以指定类型,你可以将它们设置为你想要的任何类型。

dictionary类是你在这里的朋友

e、 g


您可以在
System.Collections.Generic

Dictionary<byte, string> dct = new Dictionary<byte, string>();
您可以像这样访问字典中的值

dct.Add(0, "Some Value");
string val = dct[0];
这意味着您需要一本词典。您可以在.NET中使用许多专用词典。但我建议您使用:

Dictionary<int, string> list = new Dictionary<int, string>();
要获取指定键的字符串值,只需使用:

list.ContainsKey(someIntHere);
string value = list[key];

这是对更新问题的回答。当前代码的问题是,您试图执行语句时,语句不在方法、属性、构造函数等内部。您不能这样做。这里有两个明显的选项。首先,您可以使用方法来构建字典:

public static class RefData
{
    private static readonly Dictionary<int, string> dict = BuildDictionary();

    private static Dictionary<int, string> BuildDictioary()
    {
        Dictionary<int, string> ret = new Dictionary<int, string>();
        ret.Add(0, "This Text");
        ret.Add(3, "That Text");
        ret.Add(4, "More Text");
        return ret;
    }
}
公共静态类RefData
{
私有静态只读字典dict=BuildDictionary();
私有静态字典buildDictionary()的
{
字典ret=新字典();
补充(0,“本文本”);
补充(3,“该文本”);
ret.Add(4,“更多文本”);
返回ret;
}
}
另一种方法是在使用C#3或更高版本时使用集合初始值设定项:

public static class RefData
{
    private static readonly Dictionary<int, string> dict = 
        new Dictionary<int, string>
    {
        { 0, "This Text" },
        { 3, "That Text" },
        { 4, "More Text" }
    };
}
公共静态类RefData
{
专用静态只读字典dict=
新词典
{
{0,“此文本”},
{3,“该文本”},
{4,“更多文本”}
};
}

请注意,在这两种情况下,我是如何将变量设置为私有和只读的。您几乎不应该公开字段,尤其是可变字段。您可能希望提供作用于字典的适当方法,并且请记住,
dictionary
不是线程安全的。

我只会使用数组aka
string[10]
您也可以使用enum,如果每次文本字符串值都相同,那么问题中发布的代码的问题在于您试图直接在类中执行语句,而不是在方法/构造函数/静态构造函数中。如果您使用g C#3-但你需要理解它目前失败的原因。@Jon-我正在使用C#3。你是说我可以通过将代码放入类RefData的构造函数中来实现它吗?@kiyoshi将代码添加到一个方法中,你不会得到那个错误。我们不应该使用byte而不是int,因为op提到了值只有0到9。我我不是说你错了,我只是问我是否错了我想这是一个很好的资源,它扩展了答案@Vamsi you can。这样做没有什么错。如果你想节省空间,但如果你最终超出了字节范围,你必须将声明更改为更大的数据类型。@Chris托弗-我试过了,但出现了一个错误。我不知道为什么。你的意思是
字典
-键类型在值类型之前。@Jon-我试过了,但收到了一条错误消息。我更新了我的问题。非常感谢。如果我想查找字典值,该方法会是什么样子。这只是一个公共查找?@Kiyo史:这将是一种公共方法,正如其他答案所显示的那样,使用字典。如果字典中没有给定的键,你必须决定你想要的行为是什么。
string value = list[key];
public static class RefData
{
    private static readonly Dictionary<int, string> dict = BuildDictionary();

    private static Dictionary<int, string> BuildDictioary()
    {
        Dictionary<int, string> ret = new Dictionary<int, string>();
        ret.Add(0, "This Text");
        ret.Add(3, "That Text");
        ret.Add(4, "More Text");
        return ret;
    }
}
public static class RefData
{
    private static readonly Dictionary<int, string> dict = 
        new Dictionary<int, string>
    {
        { 0, "This Text" },
        { 3, "That Text" },
        { 4, "More Text" }
    };
}