Sam*_*hdi 10 c# linq asp.net arrays multidimensional-array
我有一个像这样的2D数组:
string[,] ClassNames =
{
{"A","Red"},
{"B","Blue"},
{"C","Pink"},
{"D","Green"},
{"X","Black"},
};
Run Code Online (Sandbox Code Playgroud)
我通过for语句在第1列中搜索ClassName,并在第2列中返回ColorName,如下所示:
string className = "A";
string color = "Black";
for (int i = 0; i <= ClassNames.GetUpperBound(0); i++)
{
if (ClassNames[i, 0] == className)
{
color = ClassNames[i, 1];
Response.Write(color);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我想使用LINQ,而不是用于声明,以获得颜色的类名.如何将上面的语句转换为LINQ.
p.s*_*w.g 12
您可以使用该Enumerable.Range
方法生成一个整数序列,然后使用Linq查询它.
像这样的东西会起作用:
string color = Enumerable
.Range(0, ClassNames.GetLength(0))
.Where(i => ClassNames[i, 0] == className)
.Select(i => ClassNames[i, 1])
.FirstOrDefault() ?? "Black";
Run Code Online (Sandbox Code Playgroud)
或者在查询语法中:
string color =
(from i in Enumerable.Range(0, ClassNames.GetLength(0))
where ClassNames[i, 0] == className
select ClassNames[i, 1])
.FirstOrDefault() ?? "Black";
Run Code Online (Sandbox Code Playgroud)
或者将数组转换为Dictionary<string, string>
第一个:
Dictionary<string, string> ClassNamesDict = Enumerable
.Range(0, ClassNames.GetLength(0))
.ToDictionary(i => ClassNames[i, 0], i => ClassNames[i, 1]);
Run Code Online (Sandbox Code Playgroud)
然后您可以更轻松地查询它:
color = ClassNamesDict.ContainsKey(className)
? ClassNamesDict[className]
: "Black";
Run Code Online (Sandbox Code Playgroud)
如果你不得不做这样的大量查询,首先生成字典然后查询它会更有效率.