【问题标题】:List string C# query列出字符串 C# 查询
【发布时间】:2013-09-03 12:07:19
【问题描述】:

我在 C# 中使用列表类型,我想知道如果我 100% 确定以下条件中只有一个条件在任何给定时间为真,那么使用它的最佳方法是什么。基本上我只需要输出列表中的城市,下面的代码是否正确?

// List of cities we need to join
List<string> cities = new List<string>();
if(country == US)      cities.Add("New York");
if(country == India)   cities.Add("Mumbai");
if(country == Germany) cities.Add("Berlin");

string output = string(cities);
Console.WriteLine(output);

【问题讨论】:

  • 你可以尝试过,但编译不出来。
  • 你想要达到什么目的?
  • 如果只有 1 个城市,你真的需要一个列表吗?
  • 如果您确定只有一个条件为真,请使用 switch case....
  • switchelse if

标签: c# list


【解决方案1】:

为什么不直接使用字典?

var d = new Dictionary<string, string>
{
    {"US", "New York"},
    {"India", "Mumbai"},
    {"Germany", "Berlin"},
};

// if you really want a list
List<string> output = new List<string> { d[country] }; 

// if not 
string city = d[country]

// even better
string city;
if (d.TryGetValue(country, out city))
{ } // city found 
else
{ } // city not found 

【讨论】:

  • @user2732622 我明白了;所以我的问题是:为什么不只使用字典?它提供了 countrycity 之间的清晰映射。
【解决方案2】:

您不需要列表?!?!?!?

var city = String.Empty;
if(country == "US")      city ="New York";
if(country == "India")   city = "Mumbai";
if(country == "Germany") city ="Berlin";

Console.WriteLine(city);

但老实说,提交的代码无法编译,所以我怀疑你花了超过 3 秒试图自己解决这个问题。

【讨论】:

  • 我怀疑我不需要列表类型。如果只有 1 个 if() 条件可以为真,使用 else if 会比使用 if 更快吗?
  • 谁在乎速度?微优化只会破坏可读性好的代码。将微优化留给计算 CPU 周期数的图形调谐器和 c/c++ 人员。
【解决方案3】:

你可以使用switch:

switch(country)
{
    case "US":
        cities.Add("New York");
        break;
    case "India":
        cities.Add("Mumbai");
        break;
    case "Germany":
        cities.Add("Berlin");
        break;
    default:
        break;
}
// i assume you want to list the countries:
Console.WriteLine(string.Join(",", cities));

如果您想使用if 语句但ifs 相互“排除”,只需使用if-else

if (country == "US")cities.Add("New York");
else if (country == "India") cities.Add("Mumbai");
else if (country == "Germany") cities.Add("Berlin");

【讨论】:

  • @user2732622:它就像您的ifs 的替代品。我假设这就是您所追求的,因为您提到 “在给定时间只有 1 个条件可以为真”
  • @user2732622:编辑了我的答案,向您展示了if-else 方法,其中重点是else
  • 对不起我之前的愚蠢问题,开关对我来说是理想的,我还有 1 个问题:我不需要城市列表,只需要字符串格式的开关结果,怎么做我得到那个输出?我需要将城市声明为变量吗?
  • @user2732622:如果您只需要一个城市,请在switch(或if-else)上方声明一个string变量,并在switch(或if-else)中对其进行初始化。
【解决方案4】:

您可以使用switch stament

switch 语句是选择开关的控制语句 从候选列表中执行的部分。

每个 switch 部分包含一个或多个 case 标签和一个列表 或更多陈述。以下示例显示了一个简单的开关 具有三个 switch 部分的语句。每个开关部分有一个 案例标签,例如案例 1,以及两个语句的列表。

所以你可以有类似的东西

switch (country )
{
    case US:
        cities.Add("New York");
        break;
    case India:
        cities.Add("Mumbai");
        break;
    case Germany:
        cities.Add("Berlin");
        break;
}

【讨论】:

    【解决方案5】:

    你可以使用开关

    switch(country) 
    {
       case "US":
           //stuff
           braek;
       case "India":
           //stuff
           break;
    
    }
    

    【讨论】:

      【解决方案6】:

      正如上面答案中已经提到的,您可以使用Dictionaryswitch CaseElse If

      我也不知道你什么时候知道一次只能满足一个条件,那么你为什么要使用List,你可以使用string 变量来存储输出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-10
        • 1970-01-01
        • 2019-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多