IEnumerable <t> </t>的问题

时间:2009-12-17 19:46:19

标签: c# c#-3.0

我想实现以下功能。

private static IEnumerable<T> Read()
{
...
}

如果我尝试编译项目,则会发生编译错误。

未找到类型。

任何人都可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:12)

问题是您正在返回IEnumerable<T>,但您没有指定T。您的签名应如下所示:

private static IEnumerable<T> Read<T>()
{
...
}

答案 1 :(得分:7)

当你提出这个:

private static IEnumerable<T> Read() {...}

您正在声明一个泛型返回类型(IEnumerable<T>),但为了使其工作,编译器需要能够找出“T”的含义。必须要做的三件事之一。

1)您可以在泛型类中实现它:

public class MyClass<T> {
    // T is now the type of MyClass<T>
    private static IEnumerable<T> Read() {...}

}

在这种情况下,返回类型将与包含类的泛型类型相同。这意味着你要调用它(因为它是静态的),如:

var results = MyClass<int>.Read();

2)您可以在通用方法中实现此功能。在这种情况下,您应该将声明更改为:

private static IEnumerable<T> Read<T>() { ... }

这使编译器可以在方法调用时知道将返回什么类型的IEnumerator<T>。你会这样称呼:

var results = MyClass.Read<int>();

3)如果Read()方法始终返回相同的类型,则可以指定特定类型。例如,如果您的方法始终读取整数,则可以执行以下操作:

private static IEnumerable<int> Read() { ... }

然后将其称为:

var results = MyClass.Read();

答案 2 :(得分:1)

您需要做以下四件事之一:

添加到源文件的顶部:

using System.Collections.Generics;

将方法包含在泛型类中:

class MyClass<T> {
    private IEnumerable<T> Read() {
        //
    }
}

使方法通用:

private IEnumerable<T> Read<T>() {
    //
}

T替换为已知类型,例如:

private IEnumerable<string> Read() {
    //
}

答案 3 :(得分:-1)

using System.Collections;

或者可能

using System.Collections.Generic;