Вы можете скомпилировать код с помощью не , используя Tuple<object>
, но используя Tuple<T>
void foo<T>(Tuple<T> t)
Если вы не хотите этого делать, вы просто необходимо будет явно указать строку для объекта в методе Tuple.Create.
Tuple.Create<object>("Hello");
Tuple.Create((object)"Hello");
Подумайте, можете ли вы иметь Tuple<object>
, а затем передать Tuple<string>
.Что если ваша подпись была
void(ref Tuple<object> t)
Ничто не мешает вам писать в этом методе
t = new Tuple<object>(1);
И теперь вы просто поместили 1 в кортеж, который допускает только строки.Конечно, это угловой случай, поскольку Tuple изначально доступен только для чтения, поэтому вам нужен параметр ref
, но, тем не менее, это проблемный случай.