2

私はコンバーターを使用してをに変換しList<string>ていますList<UInt32>

うまくいきますが、配列要素の1つが変換できない場合、ToUint32はスローしFormatExceptionます。

失敗した要素についてユーザーに通知したいと思います。

try
{
    List<UInt32> MyList = SomeStringList.ConvertAll(new Converter<string, UInt32>(element => Convert.ToUInt32(element)));
}

catch (FormatException ex)
{
      //Want to display some message here regarding element.
}

FormatExceptionをキャッチしていますが、文字列名が含まれているかどうかがわかりません。

4

3 に答える 3

3

TryParse次の方法を使用できます。

var myList = someStringList.ConvertAll(element =>
{
    uint result;
    if (!uint.TryParse(element, out result))
    {
        throw new FormatException(string.Format("Unable to parse the value {0} to an UInt32", element));
    }
    return result;
});
于 2013-01-13T16:58:10.183 に答える
3

ラムダ内で例外をキャッチできます。

List<UInt32> MyList = SomeStringList.ConvertAll(new Converter<string, UInt32>(element =>
{
    try
    {
        return Convert.ToUInt32(element);
    }
    catch (FormatException ex)
    {
       // here you have access to element
       return default(uint);
    }
}));
于 2013-01-13T17:00:15.267 に答える
0

このコンテストで使用するものは次のとおりです。

List<String> input = new List<String> { "1", "2", "three", "4", "-2" };

List<UInt32?> converted = input.ConvertAll(s =>
{
    UInt32? result;

    try
    {
        result = UInt32.Parse(s);
    }
    catch
    {
        result = null;
        Console.WriteLine("Attempted conversion of '{0}' failed.", s);
    }

    return result;
});

後でいつでもWhere()メソッドを使用してnull値をフィルタリングできます。

Where(u => u != null)
于 2013-01-13T17:20:21.587 に答える