2

私は文字列の配列を持っていますが、そのほとんどは「true」または「false」の値であり、そうでないものもあり、そのままにしておく必要があります。配列をループして、「true」または「false」を 1 または 0 に変更したいのですが、開始しましたが、構文に苦労しています

string[] data = args.Trim().Split(',');

// Loop over strings
foreach (string s in data)
{
    if(s == "true")
    {
        Convert.ToInt32(s)=1;????
    }
    else if(s == "false")
    {
        ??????
    }
}

誰かがガイダンスを提供できますか

4

6 に答える 6

3

おそらくLinqで:

string[] data = args.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => StringComparer.OrdinalIgnoreCase.Equals("true", s.Trim()) ? "1"
               : StringComparer.OrdinalIgnoreCase.Equals("false", s.Trim()) ? "0" : s)
    .ToArray();

StringComparer.OrdinalIgnoreCase必要に応じて大文字と小文字を区別しない方法を示すために を追加しました。

サンプル文字列にコメントを付けたデモを次に示します

this,1,is,not,0
于 2013-04-15T15:42:26.537 に答える
0

これを試して:

var result = data.Select(input => input == "true" ? 1 : (input == "false")? 0 : -1);
于 2013-04-15T15:37:23.490 に答える
0

これは、単純な for ループで実行できます。

        List<string> newArgs = new List<string>();
        for (int i = 0; i <= args.Length - 1; i++)
        {
            newArgs.Add(args[i] == "true" ? "1"
                : args[i] == "false" ? "0"
                : args[i]);
        }

または、拡張オブジェクトを内部的に使用してコレクションを反復処理する linq を使用します。

于 2013-04-15T15:55:20.380 に答える
-4

あなたが直面している問題は、新しい配列を作成せずに変数自体を保持していることです。行を入力すると

string[] data = args.Trim().Split(',');

その配列内の変数が文字列型であることを宣言しています。それらを整数に変換したい場合は、整数または未定義の型の新しい配列を作成する必要があります。配列内の複数の型のコードは

object[]

その場合、次のようなことをします

object[] data = args.Trim().Split(',');
foreach(string s in data){
    if(s == "true"){
        s = 1;
        Convert.ToInt32(s);
    }
    else if(s == "false"){
        s = 0;
        Convert.ToInt32(s);
    }
}
于 2013-04-15T15:48:24.200 に答える