1
var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text };
list = list.OrderBy(x => int.Parse(x)).ToArray();

整数として解析できないすべての値に対してnull値が返されるように、上記のコードを修正する方法を誰かがアドバイスできますか?

Parseどういうわけか交換する必要があると思いますTryParseか?

明確化

プログラムは、3つの異なるテキストボックスから3つの整数を受け取り、それらをソートして、シーケンスをデータベースに挿入します。非整数が入力された場合、それをnull値として扱いたいと思いました。

たとえば、、、およびの場合、TextBox1.Text = ""挿入されるシーケンスは次のようになります。TextBox2.Text = "45"TextBox3.Text = "8"0,8,45

ただし、整数以外の整数をソートから除外する方がよいと思います。同じ例の場合、結果のシーケンスは次のようになります8,45,N/A

要件を明確に説明できなかったことをお詫びします。

4

4 に答える 4

7

LINQ to Objectsを実際に使用している場合は、別のメソッドを作成します。

public static int? ParseOrNull(string text)
{
    int result;
    return int.TryParse(text, out result) ? (int?) result : null;
}

それで:

list = list.OrderBy(x => ParseOrNull(x)).ToArray();

これは、非数値への真の文字列参照またはnull参照のいずれかであるテキスト値に対処します。ParseOrNullを受け入れるためにオーバーロードすることをお勧めしIFormatProviderます。

ただし、これはnull許容整数による順序付けにすぎません。無効な値をnullに置き換えたいが、他の値は文字列として(数値順に)残したい場合は、次のようなものが必要だと思います。

var result = list.Select(x => new { Text = x, Numeric = ParseOrNull(x) })
                 .OrderBy(pair => pair.Numeric)
                 .Select(pair => pair.Numeric.HasValue ? pair.Text : null)
                 .ToArray();

これらのどちらもあなたが望むことをしない場合は、あなたの要件を明確にしてください。

これは、LINQ toSQLやEntityFrameworkのように、メソッドをSQLに変換できないものでは機能しないことに注意してください。

于 2013-02-22T17:11:24.250 に答える
2

これを試して:

var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text };
list = list.OrderBy(x =>
            {
                int val;
                return int.TryParse(x, out val) ? (int?)val : null;
            }).ToArray();
于 2013-02-22T17:12:06.580 に答える
1

要件を理解し、コード(結果を同じ配列に割り当てる)を読んでいるので、出力として文字列が必要ですが、数値で並べ替えられ、結果の配列で解析できない文字列はnull;として表示されます。

var result = 
    list
      .Select(x => { int tmp; return Int32.TryParse(x, out tmp) ? x : null; })
      .OrderBy(x => x);
于 2013-02-22T17:21:30.110 に答える
-1

これを試して:

    var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text };
    list = list.OrderBy(x => ParseStringToInt(x)).ToArray();


    private int ParseStringToInt(string value)
    {
        int result;
        int.TryParse(value, out result);
        return result;
    }
于 2013-02-22T17:12:33.957 に答える