Обход для функции, имеющей тип возврата как Коллекция <T> - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть функция, которая должна возвращать тип Collection ;это T, потому что объект Collection будет отличаться каждый раз, что означает, что возвращаемый тип функции должен быть универсальным.Но возвращаемые типы Collection выдают ошибку, поскольку "T не распознается, вы пропустили ссылку?"когда я объявляю функцию как публичную статическую коллекцию func_name ().

Есть ли способ обойти это?

Спасибо ...

Ответы [ 4 ]

4 голосов
/ 20 февраля 2012

Вы должны объявить это как

public static Collection<T> func_name<T>() ...

Вы можете удалить второй T, если функция определена внутри класса, который уже имеет универсальный параметр T.

3 голосов
/ 20 февраля 2012

Вы не можете написать:

public static Collection<T> func_name()
{
    // Implementation
}

Как функция узнает, какой тип возвращать?

В объявлении метода необходимо указать, что для него требуется указать тип T:

public static Collection<T> func_name<T>()
{
    // Implementation
}

...

Collection<string> obj = func_name<string>();

Обратите внимание, что в некоторых случаях компилятор может определить , какой тип используется (это называется вывод типа ). Он не меняет объявление метода, но может просто использовать метод:

public static Collection<T> func_name<T>(T param)
{
}

private static void Main(string[] args)
{
    string paramAsString = string.Empty;

    // Type inference here: the compiler know which is the type
    // represented by T as the parameter of the method that must 
    // be of type T is a string (so, for the compiler, T == string)
    // That's why in this example it's not required to write:
    // var obj = func_name<string>(paramAsString);
    // but following is enough:
    // var obj = func_name(paramAsString);
    Collection<string> obj = func_name(paramAsString);

    Console.ReadLine();
}

Я бы посоветовал вам взглянуть на генерики в C # .

1 голос
/ 20 февраля 2012

Объявите это как

public static Collection<T> func_name<T>()

Это называется «универсальным» в C # и несколько похоже на шаблонные классы / функции C ++. Вы можете найти некоторую основную информацию о дженериках C # и множество полезных ссылок в этой статье MSDN .

0 голосов
/ 21 февраля 2012

Спасибо за вашу помощь!

Я решил сериализовать функцию, чтобы сделать ее общей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...