关于c#:绕过具有返回类型的函数作为Collection< T>

Bypass for function having return type as Collection<T>

我有一个函数应该返回一个collection类型;这不是因为每次collection对象都不同,这意味着函数的返回类型需要是泛型的。但是collection返回类型会出错,因为"t不可识别,是否缺少引用?"当我声明函数为public static collectionfunc_name()时。

有没有绕过这个的方法?

谢谢。。。


你应该把它声明为

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

如果在已经具有泛型参数t的类中定义了函数,则可以删除第二个t。


你不能写:

1
2
3
4
public static Collection<T> func_name()
{
    // Implementation
}

函数如何知道要返回的类型?

您必须在方法声明中指定它需要指定T的类型:

1
2
3
4
5
6
7
8
public static Collection<T> func_name<T>()
{
    // Implementation
}

...

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

注意,在某些情况下,编译器可以推断使用的类型(称为类型推断)。它不会更改方法声明,但可以简单地使用该方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
public static Collection<T> func_name<T>()

这在C++中被称为"泛型",并且类似于C++模板类/函数。您可以在本文中找到一些关于C泛型的基本信息和许多有用的链接。


谢谢你的帮助!

我决定序列化该函数以使其成为通用函数。