我想实现以下功能。
private static IEnumerable<T> Read()
{
...
}
如果我尝试编译项目,则会发生编译错误。
未找到类型。
任何人都可以帮我解决这个问题吗?
答案 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;