Передача <T>в метод, где вызывается GetEnum <T> - PullRequest
0 голосов
/ 20 февраля 2009

Я использую API, у которого есть объект, который возвращает IEnumerable<T>, поэтому что-то вроде Object.GetEnum<T>.

У меня есть метод, который в нем будет вызывать GetEnum, но я хочу добавить к параметрам метода возможность передавать тип параметра. Так, например, я хочу сделать:

private void myMethod(apiClass???  apiclass)  
{
IEnumerable< itemType > enumX = ObjectGetEnum< itemType >
}
private void Main()
{
    myMethod(apiClass1);
    myMethod(apiClass2);
}

Так как выше, я не знаю, какой тип параметра должен быть в myMethod или как написать код, который получает перечислитель. Я попытался передать «apiClass», класс, от которого наследуются apiClass1 и apiClass2. Но потом застрял там, что делать ... и я не думаю, что это действительно работает в любом случае.

Так что я не уверен, что я просто не знаю, как в C # сделать это, или если это вообще возможно ... или, возможно, я что-то упускаю в API (или API не хватает чего-то, чтобы облегчить это).

Спасибо FKC

Ответы [ 3 ]

5 голосов
/ 20 февраля 2009

Хорошо, я собираюсь сделать попытку, хотя я бы хотел, чтобы вопрос был уточнен Я подозреваю, что вам просто нужно сделать метод универсальным:

private void MyMethod<TItem>() where TItem : ApiClass
{
    IEnumerable<TItem> enumX = ObjectGetEnum<TItem>();
}

private static void Main()
{
    MyMethod<ApiClass1>();
    MyMethod<ApiClass2>();
}
0 голосов
/ 20 февраля 2009

Вам нужно что-то вроде этого:

private void myMethod<T>()
{
    IEnumerable<T> enumX = ObjectGetEnum<T>();
}
0 голосов
/ 20 февраля 2009

Вы пытаетесь получить доступ к параметру типа закрытого составного типа внутри метода? Может быть, что-то вроде этого будет работать:

using System;

class Foo<T> { }

class Program
{
    static void Main()
    {
        myMethod(new Foo<String>());
    }

    private static void myMethod<T>(Foo<T> foo)
    {
        // use the T parameter in here
    }
}
...