C#如果hostname包含字符串,则检查数组列表

时间:2017-05-23 05:25:54

标签: c# arrays string

我正在编写一个工作程序,当它初始化时,会通过一系列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#进行编码时仍然是一个轻微的菜鸟,但我学习了很多,因为我使用这种语言,我尽量避免寻求帮助,但我很难过。任何反馈/意见将非常感谢,提前感谢。

6 个答案:

答案 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中是否存在buildingCodeArray.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