在 C# 中,函数如何将 IEnumerable 接口作为 return 类型?
In C# how can a function have an IEnumerable Interface as a return type?
所以我明白这个函数允许用foreach语句迭代结果,但我不明白return类型怎么可以是一个接口。
public static IEnumerable<int> Func1(int number, int exponent)
{
int exponentNum = 0;
int numberResult = 1;
while (exponentNum < exponent)
{
numberResult *= number;
exponentNum++;
yield return numberResult;
}
}
在 MSDN 文档中它指出:
The interface defines only the signature
• An interface can't be instantiated directly. Its members are implemented by any class or struct that implements the interface.
因此,如果接口只包含方法签名,那么一个函数怎么可能是 return 类型的呢?以及这个函数如何启用foreach语句?
如果 return 类型是一个接口,任何实现该接口的具体 class 都可以从函数中 return。
作为一个简单的示例,您可以 return List<int>
,它实现了 IEnumerable<int>
.
表示你可以return任何实现接口的东西,调用代码不需要关心具体实现是什么,但是可以使用returned的任何函数在接口中声明的对象。
这是您在部分代码之间创建标准接口的一种方式,同时允许更改内部实现而不影响其他一切。
例如,您可以从函数中 return List<int>
,它是有效的。
你的函数使用 yield return
,这意味着它会 return 迭代的每个元素一次一个,并隐式地为你创建 IEnumerable<int>
,而不是你创建一个显式的列表对象。在内部,它会创建一些实现 IEnumerable
和 return 的具体类型,但调用代码只会将其视为 IEnumerable
,因为这是方法的 return 类型。 https://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx 为您提供了更多详细信息以及与您发布的功能非常相似的示例。
所以我明白这个函数允许用foreach语句迭代结果,但我不明白return类型怎么可以是一个接口。
public static IEnumerable<int> Func1(int number, int exponent)
{
int exponentNum = 0;
int numberResult = 1;
while (exponentNum < exponent)
{
numberResult *= number;
exponentNum++;
yield return numberResult;
}
}
在 MSDN 文档中它指出:
The interface defines only the signature
• An interface can't be instantiated directly. Its members are implemented by any class or struct that implements the interface.
因此,如果接口只包含方法签名,那么一个函数怎么可能是 return 类型的呢?以及这个函数如何启用foreach语句?
如果 return 类型是一个接口,任何实现该接口的具体 class 都可以从函数中 return。
作为一个简单的示例,您可以 return List<int>
,它实现了 IEnumerable<int>
.
表示你可以return任何实现接口的东西,调用代码不需要关心具体实现是什么,但是可以使用returned的任何函数在接口中声明的对象。
这是您在部分代码之间创建标准接口的一种方式,同时允许更改内部实现而不影响其他一切。
例如,您可以从函数中 return List<int>
,它是有效的。
你的函数使用 yield return
,这意味着它会 return 迭代的每个元素一次一个,并隐式地为你创建 IEnumerable<int>
,而不是你创建一个显式的列表对象。在内部,它会创建一些实现 IEnumerable
和 return 的具体类型,但调用代码只会将其视为 IEnumerable
,因为这是方法的 return 类型。 https://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx 为您提供了更多详细信息以及与您发布的功能非常相似的示例。