我想实现以下功能.
private static IEnumerable<T> Read()
{
...
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试编译项目,则会发生编译器错误.
找不到类型.
任何人都可以帮我解决这个问题吗?
Ran*_*pho 12
问题是你要回来IEnumerable<T>,但你没有说明T.您的签名应如下所示:
private static IEnumerable<T> Read<T>()
{
...
}
Run Code Online (Sandbox Code Playgroud)
当你把这个:
private static IEnumerable<T> Read() {...}
Run Code Online (Sandbox Code Playgroud)
您正在声明一个泛型返回类型(IEnumerable<T>),但为了使其工作,编译器需要能够找出"T"的含义.三件事之一必须发生.
1)您可以在泛型类中实现它:
public class MyClass<T> {
// T is now the type of MyClass<T>
private static IEnumerable<T> Read() {...}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,返回类型将与包含类的泛型类型相同.这意味着你要调用它(因为它是静态的),如:
var results = MyClass<int>.Read();
Run Code Online (Sandbox Code Playgroud)
2)您可以在通用方法中实现此功能.在这种情况下,您应该将声明更改为:
private static IEnumerable<T> Read<T>() { ... }
Run Code Online (Sandbox Code Playgroud)
这使编译器在方法调用时知道IEnumerator<T>将返回什么类型.你会这样称呼:
var results = MyClass.Read<int>();
Run Code Online (Sandbox Code Playgroud)
3)如果Read()方法始终返回相同的类型,则可以指定特定类型.例如,如果您的方法始终读取整数,则可以执行以下操作:
private static IEnumerable<int> Read() { ... }
Run Code Online (Sandbox Code Playgroud)
然后将其称为:
var results = MyClass.Read();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |