【发布时间】:2014-02-14 11:05:21
【问题描述】:
有没有一种巧妙的方法可以忽略 Linq 中的异常?即,假设我有一个类ObjectA,它在其构造函数中接受一个字符串参数,并且在构造函数中进行了一些验证——这意味着如果字符串没有正确的格式,构造函数将抛出。通过以下代码,我将从字符串列表中获得ObjectA 的列表:
var result = new List<ObjectA>();
foreach (string _s in ListOfFiles) {
try {
ObjectA _A = new ObjectA(_s);
result.Add(_A);
}
catch{}
}
所以我的问题是:是否有单行 linq 方式,a la(伪代码即将出现......)
var result = ListOfFiles.Select(n => try {new ObjectA(n)}).ToList();
【问题讨论】:
-
你可以做到,就像在 Felipe 的解决方案中一样(他打败了我),但我认为这不是一个好主意。它可能导致大型集合的性能不佳 - 异常非常昂贵 - 而且它在概念上也很“脏”......相反,
ObjectA可能会公开一些方法,您可以询问n是否是合法值。如果有一天由于不同的原因引发异常怎么办 - 如果您默默地吞噬所有异常,则需要一段时间来跟踪错误。 -
是的,我同意你的看法@Konrad Morawski。
-
嗯,实际上这取决于。如果异常是异常情况(即通常您没有异常),那么您可以对大型集合使用异常处理。但是,如果发生异常,永远永远不要吞下它——要么处理并记录它,要么包装并抛出
-
@Konrad,是的,有一种方法来验证这是可能的,但是您需要首先构造实例才能访问该方法。在我的情况下,我想填充只读字段,所以它必须在构造函数中发生,我不能构造空对象,检查它是否有效,然后填充
-
@Sergey, Konrad: ofc 我同意应该处理异常。这段代码用于生产状态,我想快速做事。在最终版本中,我将添加验证方法/异常处理等。但这不是我的问题。