2
if (File.Exists(file.csv))
{
   return file.csv;
}
else if (File.Exists(file.dbf))
{
   return file.dbf;
}

我可以用一行来简化这个表达式吗?

4

4 回答 4

11

如果您愿意接受InvalidOperationException如果不存在匹配的文件:

return new[]{file.csv, file.dbf}.First(File.Exists);

编辑:

如果您不想要异常(您从问题中删除了该部分),FirstOrDefault()请改用并检查null,正如威廉邓肯在他的评论中已经提到的那样。

于 2013-04-03T12:52:27.127 回答
6

不是以仍然可读的方式。但是,您可以将该代码提取到它自己的方法中。

此外,else不需要。

于 2013-04-03T12:50:54.967 回答
1

我认为在一行中这样做没有任何优势,但作为替代方案,也许你可以这样做:

var files = new[] { "file.csv", "file.dbf" };
foreach (var file in files)
{
    if (File.Exists(file))     
    {      
        return file;
    }       
}

这个扩展性更强,没有重复的字符串。

于 2013-04-03T13:03:56.767 回答
-1

一行:是的。删除除最后一个以外的所有换行符。

一个简单的陈述:不。您的代码有条件地返回。我怀疑 C# 中有一个简单的命令可以做到这一点。

于 2013-04-03T12:56:08.557 回答