Некоторый контекст был бы полезен, но похоже, что у вас есть что-то вроде
class Foo<T> where T : Y {
object GetIndexer() { /* ... */ }
}
В таком случае, почему бы просто
SomeCollection<Y> GetIndexer() { /* */ }
Таким образом, не требуется каст.
Но меня немного смущает использование вами термина «индексатор». Индексатор для C # - это способ перегрузки оператора [] для типа, так что вы можете делать такие вещи, как:
MyCollectionType c = new MyCollectionType()
c["someValue"]
Они определены так:
class MyCollectionType {
public string this [string index] // This particular indexer maps strings to strings, but we could use other types if we wished.
get {} // Defines what to do when people do myCollection["foo"]
set {} // Defines what to do when people do myCollection["foo"] = "bar"
}
Объект типа SomeCollection<Y>
не является индексатором, это коллекция.