开关无法识别超过1个字符

时间:2013-02-12 13:13:18

标签: c# switch-statement

我一定很累,因为这应该很简单。我试图从命令行中找到传递给我的程序的值。

以下是代码:

private static bool ParseParms(IEnumerable<string> parms)
{

  try
  {
  foreach (var s in parms)
  {
    if (!s.Contains(":")) continue;
    var split = s.Split(Convert.ToChar(":"));
    if (split.Count() != 2) continue;
    Console.WriteLine("split[0]: " + split[0]);
    Console.WriteLine("split[1]: " + split[1]);
    switch (s[0].ToString())
    {
        // branch
      case "b":
        CustomerInfo.Branch = split[1];
        break;

        // account
      case "a":
        CustomerInfo.AccountNumber = split[1];
        break;

        //name
      case "n":
        CustomerInfo.Name = split[1];
        break;

        //street
      case "str":
        CustomerInfo.Street = split[1];
        break;

        // city
      case "c":
        CustomerInfo.City = split[1];
        break;

        // state
      case "st":
        CustomerInfo.State = split[1];
        break;

        // street
      case "z":
        CustomerInfo.Zip = split[1];
        break;

    }

  }

  Console.WriteLine("=======================");
  Console.WriteLine("name: " + CustomerInfo.Name);
  Console.WriteLine("br: " + CustomerInfo.Branch);
  Console.WriteLine("acctno: " + CustomerInfo.AccountNumber);
  Console.WriteLine("street: " + CustomerInfo.Street);
  Console.WriteLine("city: " + CustomerInfo.City);
  Console.WriteLine("state: " + CustomerInfo.State);
  Console.WriteLine("zip: " + CustomerInfo.Zip);
  Console.WriteLine("=======================");


  if(string.IsNullOrWhiteSpace(CustomerInfo.Branch) || string.IsNullOrWhiteSpace(CustomerInfo.AccountNumber))
  {
    return false;
  }
  return true;
  }
  catch (Exception ex)
  {
    Console.WriteLine("Error: " + ex.Message);
    return false;
  }
}

这就是我传递的内容:

“b:01”“a:012345”“n:John Doe”“str:123 Street”“st:AL”“c:Bessemer”“z:35020”

来自调试的控制台:

split[0]: b
split[1]: 01
split[0]: a
split[1]: 012345
split[0]: n
split[1]: John Doe
split[0]: str
split[1]: 123 Street
split[0]: st
split[1]: AL
split[0]: c
split[1]: Bessemer
split[0]: z
split[1]: 35020

结果如下:

=======================
name: John Doe
br: 01
acctno: 012345
street: 
city: Bessemer
state: 
zip: 35020
=======================

正如你所看到的,街道和州是空白的,我无法弄清楚为什么......

HALP!

6 个答案:

答案 0 :(得分:4)

问题只是一个错字。你输入了

switch (s[0].ToString())

而不是

switch (split[0].ToString())

答案 1 :(得分:2)

在您的switch语句中将switch (s[0].ToString())更改为switch (split[0])

split[0]包含您要测试的字符串。
s[0].Tostring()是字符串的第一个字符。

您的代码适用于部分但不是所有情况,因为您的某些案例是单字符串。

答案 2 :(得分:2)

您的问题是您只获得string的第一个字符。

switch (s[0].ToString())

根据您的代码,您可能更愿意使用split[0],而不是s[0]

switch (split[0])

答案 3 :(得分:1)

switch (split[0].ToString())

switch (s[0].ToString())

部分案例陈述有效,因为s[0]返回s字符串的第一个字符(例如b代表“b:01”)。

答案 4 :(得分:1)

当你执行s[0].ToString()时,你只会接受字符串的第一个字符。

s已经是字符串类型,实际上是一个字符数组。所以你取该数组的第[0]个元素

答案 5 :(得分:1)

变化:

switch (s[0].ToString())

switch (split[0].ToString())

好吧,如果我只快几分钟......