IEnumerable <T>的问题

0 c# c#-3.0

我想实现以下功能.

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)

  • 还有其他选项,包括将它放在泛型类中,或定义特定类型,例如IEnumerable <int> Read()... (2认同)

Ree*_*sey 7

当你把这个:

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)