开关是';t识别超过1个字符
本文关键字:1个 字符 识别 开关 | 更新日期: 2023-09-27 17:58:44
我一定很累,因为这应该很简单。我正试图找到从命令行传递到程序中的值。
这是代码:
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
=======================
正如你所看到的,街道和州都是空白的,我不明白为什么。。。
停下!
问题只是一个拼写错误。您键入了
switch (s[0].ToString())
而不是
switch (split[0].ToString())
在switch语句中将switch (s[0].ToString())
更改为switch (split[0])
。
split[0]
包含要测试的字符串s[0].Tostring()
仅是字符串的第一个字符。
您的代码适用于某些情况,但不是所有情况,因为有些情况是单字符串。
您的问题是只得到string
的第一个字符。
switch (s[0].ToString())
根据您的代码,您可能更希望使用split[0]
,而不是s[0]
。
switch (split[0])
switch (split[0].ToString())
不是,
switch (s[0].ToString())
由于s[0]
返回s
字符串的第一个字符(类似于"b:01"的b),因此一些case语句可以工作。
执行s[0].ToString()
时,只获取字符串的第一个字符。
s
是字符串类型的allready,实际上是一个字符数组。所以你取数组的第[0]个元素
更改:
switch (s[0].ToString())
至
switch (split[0].ToString())
啊,要是我再快几分钟就好了。。。