Не получается применить `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;
      }
   }
}

Ответы (0 шт):