ValueTuple <((字符串借贷ID,十进制x,...)>在c#中不包含'loanID'的定义

时间:2018-08-28 08:34:16

标签: c# tuples valuetuple

我只是将ValueTuple传递给函数。我要处理此ValueTuple中的值。

很遗憾,VS 2017仅允许我访问credit.Item1。没有其他项目。到目前为止,我对ValueTuples没问题。

编译器中的错误是:

  

ValueTuple <(字符串借贷ID,十进制y,...)>不包含   “ loanID”的定义...

代码是

public void LogCredit(
    ValueTuple<(
        string loanID,
        decimal discount,
        decimal interestRate,
        decimal realReturn,
        decimal term,
        int alreadyPayedMonths)>
    credit)
{
    // not working!
    string loanID = credit.loanID;

    // this is the only thing i can do:
    string loanID = credit.Item1;

    // not working either!
    decimal realReturn = credit.Item2;
}

同时,将鼠标悬停在credit上时,我可以正确看到它: enter image description here

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您的参数只有一个单一字段Item1,因为它不是ValueTuple<...>类型,而是类型ValueTuple<ValueTuple<...>>:外部ValueTuple的单一类型参数是另一个ValueTuple,其中内部C# tuple现在包含您的stringdecimalint字段。 因此,您必须在代码中编写string loanID = credit.Item1.loanID;才能访问这些字段。

为了按预期方式访问您的字段,请移除封闭的ValueTuple,仅将C# tuple留在后面:

public void LogCredit((string loanID, decimal discount, decimal interestRate,
    decimal realReturn, decimal term, int alreadyPayedMonths) credit)
{
    string loanID = credit.loanID;

    decimal realReturn = credit.Item4;
}

要利用ValueTuple的命名字段,我更喜欢使用C# 7 Tuples

出于完整性考虑,以下是有关C#7中元组的general blog articlein-depth blog article