Основное различие между if
и оператором ?
заключается в том, что if
является оператором, а ?
создает выражение. То есть Вы можете сделать это:
var _ = (exp) ? then : else; // ok
но не это:
var _ = if (exp) { then; } else { else; }; // error
Так что, если вы ищете что-то вроде выражения foreach, не существует типа .NET, который может естественным образом возвращаться, кроме void, но нет значений типа void, поэтому вы также можете просто написать:
foreach (var item in collection) process(item);
Во многих функциональных языках вместо void
используется тип Unit, который имеет тип только с одним значением. Вы можете эмулировать это в .NET и создать собственное выражение foreach:
class Unit
{
public override bool Equals(object obj)
{
return true;
}
public override int GetHashCode()
{
return 0;
}
}
public static class EnumerableEx
{
public static Unit ForEach<TSource>(
this IEnumerable<TSource> source,
Action<TSource> action)
{
foreach (var item in source)
{
action(item);
}
return new Unit();
}
}
Однако вряд ли существует какой-либо вариант использования для таких выражений.