var tmp = null;
try {
tmp = SzyfrowanieSzybkie
}
catch {}
if (tmp == null) {
try {
tmp = SzyfrowanieWolne
}
catch {}
}
czy tez:
var tmp = null;
try {
tmp = SzyfrowanieSzybkie
}
catch
{
try {
tmp = SzyfrowanieWolne
}
catch {}
}
Z dwóch wymienionych zakładając że SzyfrowanieSzybkie rzuca exception zamiast zwracać false
/ null
to wydzielenie do osobnej metody i zwyczajnie:
try {
return SzyfrowanieSzybkie();
}
catch { // złap odpowiedni wyjątek, pewnie go znasz a szyfrowania nie ma sensu powtarzać np w przypadku OutOfMemory
return SzyfrowanieWolne();
}
Stream.of(Encryption::Fast, Encryption::Slow, Encryption::Dummy)
.map(func -> func.apply(plainData))
.filter(Optional::isPresent)
.findFirst()
.orElse(Optional.empty())
;
O ile się nie mylę to mogłeś to napisać tak:
Encryption.Fast(plainData).orElseGet(()-> Encryption.Slow(plainData))
w C# po prostu by się napisało:
Encryption.Fast(plainData) ?? Encryption.Slow(plainData)
Optional w c# za bardzo nie ma sensu, można sobie napisać extensiony do Nullable<>
i T?
jak ktoś chce.
aLe oPtiOnAl wYrAżA żE wYnIk mOże ByĆ pUsTy
tak samo jak ?
na końcu zwracanego typu