C# 是否可以将return(item1、item2、item3、item4、item5)重命名为其他名称?

C# 是否可以将return(item1、item2、item3、item4、item5)重命名为其他名称?,c#,C#,我想将名称item1、item2、item3、item4、item5更改为FunctionSuccessful、Errorline1、Errorline2、Errorline3、Errorline4。我该怎么做 我的代码没有按预期工作,因为它仍然在客户端代码中返回item1、item2、item3、item4、item5,而不是新的名称函数Successful、Errorline1、Errorline2、Errorline3、Errorline4: 我应该在Azure函数中更改什么,以便它在客

我想将名称item1、item2、item3、item4、item5更改为FunctionSuccessful、Errorline1、Errorline2、Errorline3、Errorline4。我该怎么做

我的代码没有按预期工作,因为它仍然在客户端代码中返回item1、item2、item3、item4、item5,而不是新的名称函数Successful、Errorline1、Errorline2、Errorline3、Errorline4:

我应该在Azure函数中更改什么,以便它在客户端代码中返回新名称FunctionSuccessful、Errorline1、Errorline2、Errorline3、Errorline4

Azure功能:

    [FunctionName("AddUsernamePasswordEmailToAccount")]
    public static async Task<dynamic> NewCall(
        [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestMessage req, ILogger log)
    {
        // ...

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

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

        return (FunctionSuccessful: functionsuccessful, Errorline1: errorline1, Errorline2: errorline2, Errorline3: errorline3, Errorline4: errorline4);
    }
[函数名(“AddUsernamePasswordEmailToAccount”)]
公共静态异步任务NewCall(
[HttpTrigger(AuthorizationLevel.Anonymous,“post”,Route=null)]HttpRequestMessage请求,ILogger日志)
{
// ...
bool functionsuccessful=false;
string errorline1=string.Empty;
string errorline2=string.Empty;
string errorline3=string.Empty;
string errorline4=string.Empty;
var result=await clientAPI.AddUsernamePasswordAsync(请求);
if(result.Error!=null)
{
var errors=OnPlayFabError(result.Error,语言);
errorline1=错误[0];
errorline2=错误[1];
errorline3=错误[2];
errorline4=错误[3];
}
其他的
{
functionsuccessful=true;
}
返回(FunctionSuccessful:FunctionSuccessful,Errorline1:Errorline1,Errorline2:Errorline2,Errorline3:Errorline3,Errorline4:Errorline4);
}
客户端代码:

            Dictionary<string, object> dic = PlayFabSimpleJson.DeserializeObject<Dictionary<string, object>>(result.Result.FunctionResult.ToString());
            if (dic.TryGetValue("FunctionSuccessful", out object a))
            {
                addedcredentials = (bool)a;
            }
            if (dic.TryGetValue("Errorline1", out object b))
            {
                errorline1 = (string)b;
            }
            if (dic.TryGetValue("Errorline2", out object c))
            {
                errorline2 = (string)c;
            }
            if (dic.TryGetValue("Errorline3", out object d))
            {
                errorline3 = (string)d;
            }
            if (dic.TryGetValue("Errorline4", out object e))
            {
                errorline4 = (string)e;
            }
Dictionary dic=PlayFabSimpleJson.DeserializeObject(result.result.FunctionResult.ToString());
if(dic.TryGetValue(“功能成功”,输出对象a))
{
addedcredentials=(bool)a;
}
if(dic.TryGetValue(“Errorline1”,输出对象b))
{
errorline1=(字符串)b;
}
if(dic.TryGetValue(“Errorline2”,输出对象c))
{
errorline2=(字符串)c;
}
if(dic.TryGetValue(“Errorline3”,输出对象d))
{
errorline3=(字符串)d;
}
if(dic.TryGetValue(“Errorline4”,输出对象e))
{
errorline4=(字符串)e;
}
对您的问题的简短回答 使用所需的属性创建自己的类型,并返回该类型

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; }
}
以及:

为什么会这样? 我在这里玩了一会儿,因为我可以重现你的问题,我发现了一些有趣的事情

首先,它这样做的原因是Azure函数运行时依赖于
Newtonsoft.Json
,而正是该包序列化了响应。此外,如果您阅读了,您将看到:

元组字段的默认名称是
Item1
Item2
Item3
等等您始终可以使用字段的默认名称,即使显式指定或推断字段名称

依赖这些默认名称可能会使库支持元组变得更简单。如果您阅读了
Newtonsoft.Json
repo,您将看到一个讨论,人们对实现命名元组字段的成本表示怀疑,因为他们认为这不值得付出努力

因此,为了清楚起见,我可以在一个简单的控制台应用程序中重现您的问题:

using Newtonsoft.Json;

static void Main(string[] args)
{
    var functionsuccessful = true;
    var errorline1 = "error 1";
    var errorline2 = "error 2";
    var errorline3 = "error 3";
    var errorline4 = "error 4";

    var result = (FunctionSuccessful: functionsuccessful, 
        Errorline1: errorline1, 
        Errorline2: errorline2, 
        Errorline3: errorline3, 
        Errorline4: errorline4);
    var serialised = JsonConvert.SerializeObject(result);

    Console.WriteLine(serialised);
}
产生以下输出:

{
    "item1": true,
    "item2": "error 1",
    "item3": "error 2",
    "item4": "error 3",
    "item5": "error 4"
}
但我发现有趣的是,使用
System.Text.Json
进行序列化:

serialised = System.Text.Json.JsonSerializer.Serialize(result);
Console.WriteLine(serialised);
产生:

{}
我无法解释。我不太愿意称之为bug,但我绝对没想到会是这样

编辑:查看
Seabizkit
的评论后,
System.Text.Json
尚不支持
ValueTuple
,这一点已得到确认,并应添加。

对您的问题的简短回答 使用所需的属性创建自己的类型,并返回该类型

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; }
}
以及:

为什么会这样? 我在这里玩了一会儿,因为我可以重现你的问题,我发现了一些有趣的事情

首先,它这样做的原因是Azure函数运行时依赖于
Newtonsoft.Json
,而正是该包序列化了响应。此外,如果您阅读了,您将看到:

元组字段的默认名称是
Item1
Item2
Item3
等等您始终可以使用字段的默认名称,即使显式指定或推断字段名称

依赖这些默认名称可能会使库支持元组变得更简单。如果您阅读了
Newtonsoft.Json
repo,您将看到一个讨论,人们对实现命名元组字段的成本表示怀疑,因为他们认为这不值得付出努力

因此,为了清楚起见,我可以在一个简单的控制台应用程序中重现您的问题:

using Newtonsoft.Json;

static void Main(string[] args)
{
    var functionsuccessful = true;
    var errorline1 = "error 1";
    var errorline2 = "error 2";
    var errorline3 = "error 3";
    var errorline4 = "error 4";

    var result = (FunctionSuccessful: functionsuccessful, 
        Errorline1: errorline1, 
        Errorline2: errorline2, 
        Errorline3: errorline3, 
        Errorline4: errorline4);
    var serialised = JsonConvert.SerializeObject(result);

    Console.WriteLine(serialised);
}
产生以下输出:

{
    "item1": true,
    "item2": "error 1",
    "item3": "error 2",
    "item4": "error 3",
    "item5": "error 4"
}
但我发现有趣的是,使用
System.Text.Json
进行序列化:

serialised = System.Text.Json.JsonSerializer.Serialize(result);
Console.WriteLine(serialised);
产生:

{}
我无法解释。我不太愿意称之为bug,但我绝对没想到会是这样

编辑:在查看了
Seabizkit
的评论之后,
System.Text.Json
还不支持
ValueTuple
,这一点已得到确认,并且应该添加。

我希望您一切顺利。 您可以使用一种简单的策略,对字符串进行编码,其中第一个字符就是代码

编码:用代码表示的字符串

0:成功

1:错误行1。客户端异常1

2:错误行2。客户端异常2

3:错误行3。客户端异常3

4:错误行4。客户