2013-04-03 3 views
1
if (File.Exists(file.csv)) 
{ 
    return file.csv; 
} 
else if (File.Exists(file.dbf)) 
{ 
    return file.dbf; 
} 

Можно ли упростить это выражение с помощью одной строки?упрощенный, если есть еще

+2

Не могли бы вы перевести свое сообщение с действующим C#? Сломанный код трудно оптимизировать. –

+1

Используйте оператор [':'] (http://en.wikipedia.org/wiki/%3F:#C.23)? Но помните, что только что-то на одной линии не делает ее более «оптимальной», а менее читаемой. –

+0

@ebeeb: Вы говорите о недостающих точках с запятой? Не должно быть слишком сложно мысленно добавить их ... –

ответ

10

Если вы готовы принять InvalidOperationException, если соответствующий файл не существует:

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

Edit:

Если вы не хотите исключение (вы удалили эту часть из вашего вопроса), используйте вместо этого FirstOrDefault() и проверьте для null, как уже упоминал Виллем Дункан в своем комментарии.

+2

+1 для интересного и элегантного решения. –

+0

Используйте 'FirstOrDefault()' и проверьте «null», чтобы избежать исключения. –

+0

@WillemDuncan: OP * хочет * исключение. –

6

Не так, как это можно читать. Вы могли бы извлечь этот код в свой собственный метод.

Кроме того, else не требуется.

+1

+1 для проверки реальности. : D –

0

Одна строка: Да. Удалите все новые строки, кроме последнего.

Одно простое заявление: Нет. Ваш код условно возвращается. Я сомневаюсь, что в C# есть одна простая команда, которая делает это.

1

Я не вижу никаких преимуществ в этом в одной строке, но в качестве альтернативы, может быть, вы могли бы сделать:

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

Это один более расширяемой и не имеет никакого повторения строк.

+0

Мне любопытно, что здесь внизу. –

+0

-1 очень плохой ответ – Kira

+0

^-1 очень плохой комментарий. –

Смежные вопросы