C# 如何初始化指定所需索引的数组常量
我只想通过不仅指定值,而且指定它们将附加到的索引来初始化string[]数组常量 例如,关于: 私有静态只读字符串[]宠物=新字符串[]{“斗牛犬”、“灰狗”} 我想声明,斗牛犬对应于索引29,灰狗对应于索引5(比如php:) 有什么建议吗C# 如何初始化指定所需索引的数组常量,c#,arrays,constants,C#,Arrays,Constants,我只想通过不仅指定值,而且指定它们将附加到的索引来初始化string[]数组常量 例如,关于: 私有静态只读字符串[]宠物=新字符串[]{“斗牛犬”、“灰狗”} 我想声明,斗牛犬对应于索引29,灰狗对应于索引5(比如php:) 有什么建议吗 干杯,如果您在数据结构方面有一定的灵活性,那么使用字典而不是数组来执行此行为会更有效 示例(如果您使用的是C#3或更高版本): var-pets=新字典{ {29,“斗牛犬”}, {5,“灰狗”} }; Console.WriteLine(宠物[5]);
干杯,如果您在数据结构方面有一定的灵活性,那么使用
字典而不是数组来执行此行为会更有效
示例(如果您使用的是C#3或更高版本):
var-pets=新字典{
{29,“斗牛犬”},
{5,“灰狗”}
};
Console.WriteLine(宠物[5]);
遗留应用程序的相同示例:
Dictionary<int, string> pets = new Dictionary<int, string>();
pets[29] = "Bulldog";
pets[5] = "Greyhound";
Console.WriteLine(pets[5]);
Dictionary=newdictionary();
宠物[29]=“斗牛犬”;
宠物[5]=“灰狗”;
Console.WriteLine(宠物[5]);
您不需要字符串数组,而是需要一个字典
看一看,这里有一个很好的例子(我在这里改编):
Dictionary d=newdictionary();
d、 添加(2,“类别”);
d、 添加(1,“狗”);
d、 添加(0,“骆驼”);
d、 加上(-1,“鬣蜥”);
听起来您不想要数组,而是想要一个字典,可以这样初始化:
private static readonly Dictionary<int, string> pets =
new Dictionary<int, string> {
{ 29, "Bulldog" },
{ 5, "Greyhound" }
};
string[] myArray = CreateArray(new Tuple<int, string>(34, "cat"), new Tuple<int, string>(12, "dog"));
我认为在C#中声明数组时不可能实现所需的功能
除了像其他人建议的那样使用字典
之外,您还可以尝试使用枚举,使用对应于字符串值的特定数组索引和描述(使用描述
属性)的值
private enum Pets
{
[Description("GreyHound")]
Greyhound = 5,
[Description("Bulldog")]
Bulldog = 29
}
不能在初始值设定项中执行此操作,需要首先指定数组的大小,然后在特定位置添加项
private static readonly string[] Pets = new string[42];
然后在静态构造函数中插入项
private static MyClass
{
Pets[29] = "Bulldog";
Pets[5] = "Greyhound";
}
但正如其他人所建议的那样:使用字典作为记录,我同意大家的看法,字典可能更合适。但是你可以写一个小方法来实现你想要的:
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;
}
publicstatict[]CreateArray(参数元组[]值)
{
var sortedValues=values.OrderBy(t=>t.Item1);
T[]数组=新的T[sortedValues.Last().Item1+1];
foreach(分类值中的var值)
{
数组[value.Item1]=value.Item2;
}
返回数组;
}
这样称呼它:
private static readonly Dictionary<int, string> pets =
new Dictionary<int, string> {
{ 29, "Bulldog" },
{ 5, "Greyhound" }
};
string[] myArray = CreateArray(new Tuple<int, string>(34, "cat"), new Tuple<int, string>(12, "dog"));
string[]myArray=CreateArray(新元组(34,“猫”),新元组(12,“狗”);
如果C#接收到许多人似乎想要的Tuple
的语法糖,那么这看起来会更干净一些
这是个好主意吗?几乎可以肯定不是,但我会让OP来判断。其他答案使用起来更直观,int
是键,string
是值。此答案假设您知道值而不是所需的“索引”位置。+1-这是唯一一个在同一行中显示创建和初始化的答案,尽管其他答案通常是正确的。你像往常一样打败了我乔恩;)由于我同意你的意见,我将答案改为使用初始值设定项。此外,还有一个小的输入错误(:而不是;)不太迂腐,但是可以使用数组初始值设定项将null赋值给除第5和第29个元素以外的所有元素。不过,如果我在野外看到这一点,我可能会开枪打死肇事者:-)谢谢本,我终于实现了你的解决方案。我也使用了System.Collections.Generic.KeyValuePair。
string[] myArray = CreateArray(new Tuple<int, string>(34, "cat"), new Tuple<int, string>(12, "dog"));