0

これは単純なはずなので、疲れているに違いありません。コマンドラインからプログラムに渡された値を見つけようとしています。

コードは次のとおりです。

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
=======================

ご覧のとおり、通りと州が空白で、理由がわかりません...

ハーフ!

4

6 に答える 6

4

問題は単なるタイプミスでした。入力しました

switch (s[0].ToString())

それ以外の

switch (split[0].ToString())
于 2013-02-12T13:29:41.487 に答える
2

switch ステートメントでに変更switch (s[0].ToString())します。switch (split[0])

split[0]テストする文字列が含まれています。
s[0].Tostring()文字列の最初の文字のみです。

ケースの一部は単一の文字列であるため、コードは一部のケースでは機能しますが、すべてのケースでは機能しません。

于 2013-02-12T13:16:46.530 に答える
2

あなたの問題は、あなたの最初の文字だけを取得していることですstring.

switch (s[0].ToString())

おそらくコードに基づいてsplit[0]、代わりにを使用したいと思うでしょうs[0]

switch (split[0])
于 2013-02-12T13:17:24.907 に答える
1
switch (split[0].ToString())

いいえ、

switch (s[0].ToString())

一部の case ステートメントは、文字列s[0]の最初の文字を返すため機能しsます (「b:01」の b など)。

于 2013-02-12T13:17:07.460 に答える
1

その場合s[0].ToString()、文字列の最初の文字のみを取ります。

sはすでに文字列型であり、実際には文字の配列です。したがって、その配列の [0] 番目の要素を取得します

于 2013-02-12T13:17:20.070 に答える
1

変化する:

switch (s[0].ToString())

switch (split[0].ToString())

ああ、私が数分速くなればいいのに...

于 2013-02-12T13:21:40.243 に答える