Не получается применить `try-паттерн` при работе с `ref`
Не получается применить try-паттерн
при работе с ref
.
Код конечно же бесполезный и предназначен только для демонстрации проблемы.
Существуют-ли ещё какие способы решения этой проблемы кроме как "try-паттерн
наоборот"?
class Program
{
// Исключение в случае неудачи.
static ref int Foo(int[] arr, int idx)
{
return ref arr[idx];
}
static int UnusedUnsafe = 0;
// try-паттерн наоборот.
static ref int TryViceVersaFoo(int[] arr, int idx, out bool isSuccess)
{
if (0 <= idx && idx < arr.Length)
{
isSuccess = true;
return ref arr[idx];
}
else
{
isSuccess = false;
return ref UnusedUnsafe;
}
}
// Обычный try-паттерн не получается использовать.
static bool TryFoo(int[] arr, int idx, out ref int r)
{
if (0 <= idx && idx < arr.Length)
{
r = ref arr[idx];
return true;
}
else
{
r = ref UnusedUnsafe;
return false;
}
}
static void Main(string[] args)
{
int[] arr = { 0, 1, 2, 3, 4, 5 };
// Исключение в случае неудачи.
ref int r1 = ref Foo(arr, 3);
r1 = 33;
// try-паттерн наоборот.
ref int r2 = ref TryViceVersaFoo(arr, 8, out bool isSuccess);
if (isSuccess)
{
r2 = 88;
}
// Обычный try-паттерн не получается использовать.
if (TryFoo(arr, 8, out ref int r3))
{
r3 = 88;
}
}
}