我正在编写一个工作程序,当它初始化时,会通过一系列if / else语句根据它所在的大楼检查计算机名称,然后当语句找到匹配时,它将打印建筑物在我的表格中贴在标签上。
我想通过使用数组列表而不是20+ if / else语句来优化此过程,我遇到了问题。以下是代码:
string hostName = Environment.MachineName;
string[] buildingCode = {"B1","B2","B3","B4"};
string[] buildingName = {"Building 1", "Building 2", "Building 3", "Building 4"};
if (hostName.Contains(buildingCode))
{
Console.Write(buildingName);
}
else
{
Console.Write("Error!");
}
我希望它如何工作是它将检查计算机的hostname
以查看它是否包含来自buildingCode
数组的字符串值。然后,一旦找到匹配项,它将使用buildingName
数组中的字符串值。但错误列表显示此错误:
CS1503参数1:无法从'string []'转换为'string'
我在使用C#进行编码时仍然是一个轻微的菜鸟,但我学习了很多,因为我使用这种语言,我尽量避免寻求帮助,但我很难过。任何反馈/意见将非常感谢,提前感谢。
答案 0 :(得分:2)
您可能使用错误的数据结构导致混淆。如果您的建筑代码包含主机名,您将如何决定哪个建筑物名称对应于该代码!
您可以使用Dictionary
来存储构建代码/名称作为键/值。
string hostName = "B1";
var buildings = new Dictionary<string, string> {
{ "B1", "Building 1" },
{ "B2", "Building 2" },
{ "B3", "Building 3" },
{ "B4", "Building 4" }
};
if (buildings.ContainsKey(hostName)) {
Console.Write(buildings[hostName]);
}
else {
Console.Write("Error!");
}
P.S。虽然这可以解决您的问题,但我无法想象MachineName
如何与现实中的建筑相匹配!
更新:由于OP正在学习C#,所以fiddle可供他使用。
答案 1 :(得分:0)
首先,你不能将字符串数组与字符串
进行比较String [] = string Array
这意味着:
buildingCode[0] = B1;
buildingCode[1] = B2;
buildingCode[3] = B3;
buildingCode[4] = B4;
在您的代码中将是这样的:
string hostName = Environment.MachineName;
string[] buildingCode = {"B1","B2","B3","B4"};
string[] buildingName = {"Building 1", "Building 2", "Building 3", "Building 4"};
if (hostName.Contains(buildingCode[0]))
{
Console.Write(buildingName[0]);
}
else
{
Console.Write("Error!");
}
你可能需要进入循环来检查所有数组
答案 2 :(得分:0)
你不能写if(字符串包含数组)你需要在if中使用for循环。 像这样:
for (int i = 0; i <= stringname.length; i++)
{
if (string.Contains(stringname[i]))
{
Console.WriteLine(buildingName[i]);
//Do something
}
}
答案 3 :(得分:0)
请在下方查看。 Array.Exists
会检查hostName
中是否存在buildingCode
。 Array.IndexOf
会为您提供index
匹配,然后您可以根据索引获取buildingName
。
代码:
using System;
public class Program
{
public static void Main()
{
string hostName = "B1";
string[] buildingCode = {"B1","B2","B3","B4"};
string[] buildingName = {"Building 1", "Building 2", "Building 3", "Building 4"};
if (Array.Exists(buildingCode, element => element == hostName))
{
Console.Write(buildingName[Array.IndexOf(buildingCode, hostName)]);
}
else
{
Console.Write("Error!");
}
}
}
请检查DotNetFiddle中的输出。
答案 4 :(得分:0)
您正在比较两种不同的类型,Contains方法获取单个字符串而不是字符串数组。您的代码应该看起来像
string hostName = Environment.MachineName;
string[] buildingCode = { "B1", "B2", "B3", "B4" };
string[] buildingName = { "Building 1", "Building 2", "Building 3", "Building 4" };
if (buildingCode.Where(t => t.Contains(hostname)).Any())
{
Console.Write(buildingName[
Array.IndexOf(buildingCode,buildingCode.Where(t => t.Contains(hostname))
.FirstOrDefault())]);
}
在此处找到:ActualCode
答案 5 :(得分:0)
您无法使用11.2017
函数检查整个数组。如果你想使用group by
函数,你需要检查数组的每个元素
使用select
代替Contains