从ienumerable <string>中删除项目

Ehs*_*bar 0 c# string ienumerable

我有一个期望的方法,IEnumerable<string>你可以在这里看到:

  public static string FromDecimalAscii(IEnumerable<string> input)
        {

            return new string(input.Select(s => (char)int.Parse(s)).ToArray());
        }
Run Code Online (Sandbox Code Playgroud)

但每次我的IEnumerable的最后一条记录都是空的,所以我在这一行得到一个错误,因为:

    return new string(input.Select(s => (char)int.Parse(s)).ToArray());
Run Code Online (Sandbox Code Playgroud)

所以我必须从我的IEnumerable.删除该项目.

错误:Input string was not in a correct format 任何想法将不胜感激.

最好的祝福

小智 6

您只需要过滤集合Where:

return new string(input.Where(s => !string.IsNullOrEmpty(s))
                       .Select(s => (char)int.Parse(s)).ToArray());
Run Code Online (Sandbox Code Playgroud)

您还可以使用扩展方法来使用TryParse:

static class Extensions
{
    public delegate bool TryParseDelegate<TSource>(string s, out TSource source);

    public static IEnumerable<TResult> WhereParsed<TSource, TResult>(
                                               this IEnumerable<TSource> source,
                                               TryParseDelegate<TResult> tryParse)
    {

         // TODO: check arguments against null first

        foreach (var item in source)
        {
            TResult result;
            if (tryParse(item != null ? item.ToString() : null, out result))
            {
                yield return result;
            }
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

用法:

var collection = input.WhereParsed<string, int>(int.TryParse)
                      .Cast<char>()
                      .ToArray();
return new string(collection);
Run Code Online (Sandbox Code Playgroud)