如何使用 LINQ 选择*某些*项目?
如何在 LINQ 中编写这个函数?
public List<TResult> select(List<string> source)
{
List<TResult> result = new List<TResult>();
foreach (var a in source)
{
try { result.Add(TResult.Parse(a)); }
catch { }
}
return result;
}
我只想选择可转换为 TResult 的项目。 TResult.Parse() 返回 TResult 的新实例。
how to write this function in LINQ?
public List<TResult> select(List<string> source)
{
List<TResult> result = new List<TResult>();
foreach (var a in source)
{
try { result.Add(TResult.Parse(a)); }
catch { }
}
return result;
}
I want to select only such items that are convertable to TResult. TResult.Parse() returns new instance of TResult.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您不仅可以将 lambda 表达式传递给 LINQ 方法,还可以传递语句:
You can pass statements not just lambdas to the LINQ methods:
不完全是 LINQ,但您可以编写一个迭代器产量解决方案来一次完成它:
所以
List; results = source.SelectParse().ToList();
但是,如果您的 Parse 方法经常引发异常,那么您可能需要编写一个返回成功/失败 bool 的 TryParse 版本。 (不过,这对编写 LINQ 没有帮助。)
修复了yield-inside-try - 谢谢。与公认的解决方案相比,该解决方案的一个小优点是它支持 Parse 返回 null 作为有效结果,但我怀疑您是否需要/想要这样做。
Not quite LINQ, but you can write an iterator-yield solution to do it in a single pass:
and so
List<TResult> results = source.SelectParse<TResult>().ToList();
But if your Parse method frequently raises exception then you probably want to write a TryParse version that returns a success / failure bool instead. (That wouldn't help writing the LINQ, though.)
Fixed the yield-inside-try - thanks. The minor advantage of this solution over the accepted one is that it supports Parse returning null as a valid result, but I doubt you'd ever need / want that.
一种方法是
但是假设 Parse() 方法不会抛出异常
One way would be
But that assumes that the Parse() method does not throw an exception
您是否有权访问定义
Parse
的类,如果可以,它是否有一个TryParse
方法,或者您可以创建一个方法吗?然后
Do you have access to the class that defines
Parse
, if so does it have aTryParse
method or can you create one..Then