如何初始化指定所需索引的数组常量

时间:2010-08-23 20:35:26

标签: c# arrays constants

我只想要通过不仅指定值,而且指定它们将附加到的索引来初始化string []数组常量。

例如,在:

private static readonly string [] Pets = new string [] {“Bulldog”,“GreyHound”};

我想说BullDog对应索引29而GreyHound对应5(喜欢php :))

有什么建议吗?

干杯,

6 个答案:

答案 0 :(得分:7)

如果您在数据结构方面具有一定的灵活性,那么使用Dictionary<int, string>代替数组来实现此行为会更有效。

示例(如果您使用的是C#3或更高版本):

var pets = new Dictionary<int, string> {
    { 29, "Bulldog" },
    { 5, "Greyhound" }
};
Console.WriteLine(pets[5]);

遗留应用程序的相同示例:

Dictionary<int, string> pets = new Dictionary<int, string>();
pets[29] = "Bulldog";
pets[5] = "Greyhound";
Console.WriteLine(pets[5]);

答案 1 :(得分:6)

听起来你不想要一个数组,而是一个Dictionary<int, string>,它可以像这样初始化:

private static readonly Dictionary<int, string> pets = 
    new Dictionary<int, string> {
    { 29, "Bulldog" },
    { 5, "Greyhound" }
};

(请注意,此集合初始化程序语法仅在C#3中添加。如果您使用的是旧版本,则必须多次显式调用Add或索引器。 )

您可以通过其索引器访问字典,该字典看起来像是数组访问:

string x = pets[29];
pets[10] = "Goldfish";

答案 2 :(得分:1)

在声明数组时,我不认为你想要的是什么。

除了使用其他人建议的Dictionary之外,您可以尝试使用枚举,其值与您对应于字符串值的特定数组索引和描述(使用Description属性)相对应。

private enum Pets
{
   [Description("GreyHound")]
   Greyhound = 5,
   [Description("Bulldog")]
   Bulldog = 29
}

答案 3 :(得分:1)

为了记录,我同意每个人Dictionary可能更合适。但你可以写一点方法来实现你想要的东西:

public static T[] CreateArray<T>(params Tuple<int, T>[] values)
{
    var sortedValues = values.OrderBy(t => t.Item1);

    T[] array = new T[sortedValues.Last().Item1 + 1];

    foreach(var value in sortedValues)
    {
        array[value.Item1] = value.Item2;
    }

    return array;
}

并称之为:

string[] myArray = CreateArray(new Tuple<int, string>(34, "cat"), new Tuple<int, string>(12, "dog"));

如果C#收到许多人似乎想要的Tuple语法糖,那么这样会更清晰。

这是个好主意吗?几乎可以肯定没有,但我会留下那个让OP来判断。

答案 4 :(得分:0)

您不需要字符串数组,而是需要Dictionary

看看link text,那里有一个很好的例子(我在这里改编):

Dictionary<int, string> d = new Dictionary<int, string>();
        d.Add(2, "cat");
        d.Add(1, "dog");
        d.Add(0, "llama");
        d.Add(-1, "iguana");

答案 5 :(得分:0)

您无法在初始化程序中执行此操作,您需要先指定数组的大小,然后在特定位置添加项目。

private static readonly string[] Pets = new string[42];

然后在静态构造函数中插入项目。

private static MyClass
{
    Pets[29] = "Bulldog";
    Pets[5] = "Greyhound";
}

但正如其他人所建议的那样:使用Dictionary<int, string>