无法从迭代器 C# 返回值

问题描述 投票:0回答:1

我正在尝试使用异步函数返回可枚举值。

我在将返回的数据类型值转换为“main”方法时遇到问题,因为其中进行了异步调用。我不断实施建议的更改和我在网上阅读的内容,但每次我进行更改时,Visual Studio 都不喜欢我所做的其他操作,然后我必须返回。

错误出现在“ListOfLambdas”函数上。具体来说,就是在“收益率回报”线上。错误编号为 [CS0029][1]

你想做什么? 我希望捕获一个列表/可迭代值,然后我可以传递该值并进行其他工作。

public void FunctionHandler()
{


    IAsyncEnumerable<AWSLambda> returnedListOfLambdas = ListOfLambdas();
}

private async IAsyncEnumerable<AWSLambda> ListOfLambdas()
{
    //Instantiating Client:
    var lambdaClient = new AmazonLambdaClient();
    //Instantiating New Lambda List:
    List<AWSLambda> list = null;
    //Getting List
    var response = await lambdaClient.ListFunctionsAsync();
    response.Functions.ForEach(function =>
    {
        AWSLambda aWSLambda = MapLambda(function);
        if(list == null)
        {
            list = new List<AWSLambda>();
        }
        list.Add(aWSLambda);
    });
    yield return list; //Here is our error.
}



private static AWSLambda MapLambda(FunctionConfiguration function)
{
    AWSLambda lambdaToBeAdded = new AWSLambda();
    lambdaToBeAdded.FunctionName = function.FunctionName.ToString();
    lambdaToBeAdded.FunctionARN = function.FunctionArn.ToString();
    lambdaToBeAdded.FunctionDescription = function.FunctionName.ToString();
    lambdaToBeAdded.FunctionRunTime = function.Runtime.ToString();
    lambdaToBeAdded.FunctionMemorySize = function.MemorySize.ToString();
    lambdaToBeAdded.FunctionTimeout = function.Timeout.ToString();
    lambdaToBeAdded.FunctionHandler = function.Handler.ToString();
    return lambdaToBeAdded;
}

我收到的错误具体是“无法将类型 'System.Collections.Generic.List 隐式转换为 'saveFileS3.AWSLambda'

但这对我来说似乎很奇怪。我认为很明显“列表”变量不是那种数据类型。我缺少什么? [1]:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs0029?f1url=%3FappId%3Droslyn%26k%3Dk(CS0029)

c# aws-lambda
1个回答
0
投票

List<AWSLambda> list = null;
正是
System.Collections.Generic.List<saveFileS3.AWSLambda>
,因此当您尝试返回
AWSLambda
时编译器会抱怨。

你需要一个带有嵌套yield返回的foreach:

foreach (var lambda in list)
    yield return lambda;
© www.soinside.com 2019 - 2024. All rights reserved.