‘System.ValueTuple’ не содержит определения для ‘addedcontactmail’

#c# #azure-functions

#c# #azure-функции

Вопрос:

Я получаю это сообщение об ошибке в моей функции Azure:

‘System.ValueTuple<bool, строка, строка, строка, строка>’ не содержит определения для ‘addedcontactmail’

 namespace My.Functions
{
    public class Result
    {
        public bool FunctionSuccessful { get; set; }
        public string Errorline1 { get; set; }
        public string Errorline2 { get; set; }
        public string Errorline3 { get; set; }
        public string Errorline4 { get; set; }
    }

    public static class NewFunction
    {
      [FunctionName("MyNewFunction")]
    public static async Task<dynamic> NewCall(
        [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestMessage req, ILogger log)
        {
        var context = await FunctionContext<dynamic>.Create(req);
        var args = context.FunctionArgument;

        bool functionsuccessful = false;
        string errorline1 = string.Empty;
        string errorline2 = string.Empty;
        string errorline3 = string.Empty;
        string errorline4 = string.Empty;

        var resultcontactemail = await AddContactEmail(desiredemail, language, clientAPI);
        if (resultcontactemail.addedcontactmail == false)
        {
            functionsuccessful = resultcontactemail.addedcontactmail;
            errorline1 = resultcontactemail.errorline1;
            errorline2 = resultcontactemail.errorline2;
            errorline3 = resultcontactemail.errorline3;
            errorline4 = resultcontactemail.errorline4;
            return new Result
            {
                FunctionSuccessful = functionsuccessful,
                Errorline1 = errorline1,
                Errorline2 = errorline2,
                Errorline3 = errorline3,
                Errorline4 = errorline4
            };
        }
    
        }

    public static async Task<(bool addedcontactmail, string errorline1, string errorline2, string errorline3, string errorline4)> AddContactEmail(this string emailaddress, string language, PlayFabClientInstanceAPI clientAPI)
    {
        bool addedcontactmail = false;
        string errorline1 = string.Empty;
        string errorline2 = string.Empty;
        string errorline3 = string.Empty;
        string errorline4 = string.Empty;

        var request = new PlayFab.ClientModels.AddOrUpdateContactEmailRequest();
        request.EmailAddress = emailaddress;
        var result = await clientAPI.AddOrUpdateContactEmailAsync(request);

        if (result.Error != null)
        {
            var errors = OnPlayFabError(result.Error, language);
            errorline1 = errors[0];
            errorline2 = errors[1];
            errorline3 = errors[2];
            errorline4 = errors[3];
        }
        else
        {
            addedcontactmail = true;
        }
          return (addedcontactmail, errorline1, errorline2, errorline3, errorline4);
    }

    }
}
        
  

Что-то не так со следующей строкой кода?

  functionsuccessful = resultcontactemail.addedcontactmail;
  

«addedcontactmail» и «functionsucccessful» являются bool, почему это не работает?

Я хочу, чтобы «functionsucccessful» получал значение «resultcontactemail.addedcontactmail», оно может быть true или false.

Что именно не так?

Комментарии:

1. Похоже, вы неправильно поняли, как работают кортежи. Ваш кортеж не имеет имени, поэтому вы не можете просто получить к нему такой доступ; сначала вам нужно его распаковать. Я рекомендую вам прочитать learn.microsoft.com/en-us/dotnet/csharp/language-reference /…

2. Я не понимаю, как использовать кортежи в моем коде, чтобы я мог присвоить значение addedcontactmail функции successful .

3. Вы должны прочитать ссылку, которую я опубликовал, она показывает вам, как распаковывать кортежи.

Ответ №1:

Вы неправильно используете AddContactEmail вызов функции, потому что это расширение string . Ознакомьтесь с приведенным ниже кодом, который я протестировал в своем локальном и работает нормально:

 [FunctionName("MyNewFunction")]
        public static async Task<dynamic> NewCall(
          [HttpTrigger(AuthorizationLevel.Anonymous, "post", "get", Route = null)] HttpRequestMessage req, ILogger log)
        {
            //var context = await FunctionContext<dynamic>.Create(req);
            //var args = context.FunctionArgument;

            bool functionsuccessful = false;
            string errorline1 = string.Empty;
            string errorline2 = string.Empty;
            string errorline3 = string.Empty;
            string errorline4 = string.Empty;

            var resultcontactemail = await desiredemail.AddContactEmail(language, clientAPI);
            if (resultcontactemail.addedcontactmail == false)
            {
                functionsuccessful = resultcontactemail.addedcontactmail;
                errorline1 = resultcontactemail.errorline1;
                errorline2 = resultcontactemail.errorline2;
                errorline3 = resultcontactemail.errorline3;
                errorline4 = resultcontactemail.errorline4;
                return new Result
                {
                    FunctionSuccessful = functionsuccessful,
                    Errorline1 = errorline1,
                    Errorline2 = errorline2,
                    Errorline3 = errorline3,
                    Errorline4 = errorline4
                };
            }

            return null;
        }

        public static async Task<(bool addedcontactmail, string errorline1, string errorline2, string errorline3, string errorline4)> AddContactEmail(this string emailaddress, string language, PlayFabClientInstanceAPI clientAPI)
        {
            bool addedcontactmail = false;
            string errorline1 = string.Empty;
            string errorline2 = string.Empty;
            string errorline3 = string.Empty;
            string errorline4 = string.Empty;

            var request = new PlayFab.ClientModels.AddOrUpdateContactEmailRequest();
            request.EmailAddress = emailaddress;
            var result = await clientAPI.AddOrUpdateContactEmailAsync(request);

            if (result.Error != null)
            {
                var errors = OnPlayFabError(result.Error, language);
                errorline1 = errors[0];
                errorline2 = errors[1];
                errorline3 = errors[2];
                errorline4 = errors[3];
            }
            else
            {
                addedcontactmail = true;
            }
            return (addedcontactmail, errorline1, errorline2, errorline3, errorline4);
        }
  

Комментарии:

1. Это не работает. Я получаю сообщение об ошибке в этой строке: var resultcontactemail = ожидание желаемой почты. AddContactEmail(язык, clientAPI); ‘string’ не имеет применимого метода с именем ‘AddContactEmail’, но, похоже, имеет метод расширения с этим именем. Методы расширения не могут быть динамически отправлены. Рассмотрите возможность приведения динамических аргументов или вызова метода расширения без синтаксиса метода расширения.

2. Странно, ты что-нибудь изменил? Потому что это работает в моем локальном.

3. Я скопировал и вставил ваш код, но он не работает. Я всегда получаю сообщение об ошибке в строке: var resultcontactemail = ожидание желаемой почты. AddContactEmail(язык, clientAPI);

4. Можете ли вы попробовать удалить clientAPI из определения и вызова метода расширения?