我有一个期望IEnumerable<string>
的方法,你可以在这里看到:
public static string FromDecimalAscii(IEnumerable<string> input)
{
return new string(input.Select(s => (char)int.Parse(s)).ToArray());
}
但每次我的IEnumerable的最后一条记录都是空的,所以我在这行中出错:
return new string(input.Select(s => (char)int.Parse(s)).ToArray());
所以我必须从IEnumerable
删除该项目。
错误:Input string was not in a correct format
任何想法将不胜感激。
祝你好运
答案 0 :(得分:6)
您只需使用Where
过滤集合:
return new string(input.Where(s => !string.IsNullOrEmpty(s))
.Select(s => (char)int.Parse(s)).ToArray());
您还可以使用扩展方法来使用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;
}
}
}
}
用法:
var collection = input.WhereParsed<string, int>(int.TryParse)
.Cast<char>()
.ToArray();
return new string(collection);