public static void Main()
var int_string = new DoubleIndexer<int, string>();
((IIndex<int, string>)int_string)[1] = "Hello";
var int_byte = new DoubleIndexer<int, byte>();
((IIndex<int, byte>)int_byte)[134567] = 41;
var int_int = new DoubleIndexer<int, int>();
((IIndex<int, int>)int_int)[13] = 5431;
public interface IIndex<T1, T2>
T2 this[T1 key] { get; set; }
internal class DoubleIndexer<T1, T2> : IIndex<T1, T2>
Console.WriteLine($"this[{key}] = {value}");
T2 IIndex<T1, T2>.this[T1 key]
Console.WriteLine($"IIndex<{typeof(T1).Name}, {typeof(T2).Name}>.this[{key}] = {value}");