p.c*_*ell 42 c# iterator yield
考虑一下混淆代码.目的是通过匿名构造函数及其动态创建一个新对象yield return.目标是避免仅仅为了维护本地集合return.
public static List<DesktopComputer> BuildComputerAssets()
{
List<string> idTags = GetComputerIdTags();
foreach (var pcTag in idTags)
{
yield return new DesktopComputer() {AssetTag= pcTag
, Description = "PC " + pcTag
, AcquireDate = DateTime.Now
};
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这段代码会产生异常:
错误28'Foo.BuildComputerAssets()'的主体不能是迭代器块,因为'System.Collections.Generic.List'不是迭代器接口类型
问题
yield return正确使用?SLa*_*aks 53
您只能yield return在返回an IEnumerable或an 的函数中使用IEnumerator,而不是a List<T>.
你需要改变你的功能才能返回IEnumerable<DesktopComputer>.
或者,您可以重写要使用的函数List<T>.ConvertAll:
return GetComputerIdTags().ConvertAll(pcTag =>
new DesktopComputer() {
AssetTag = pcTag,
Description = "PC " + pcTag,
AcquireDate = DateTime.Now
});
Run Code Online (Sandbox Code Playgroud)
Bri*_*sio 17
您的方法签名是错误的.它应该是:
public static IEnumerable<DesktopComputer> BuildComputerAssets()
Run Code Online (Sandbox Code Playgroud)