ValueTuple<(string loanID, decimal x, ...)> 在 c# 中不包含 'loanID' 的定义

ValueTuple<(string loanID, decimal x, ...)> does not contain a definition for 'loanID' in c#

我只是将一个 ValueTuple 传递给一个函数。我想处理这个 ValueTuple 中的值。

不幸的是,VS 2017 只允许我访问 credit.Item1。没有进一步的项目。到目前为止,我对 ValueTuples 没有任何问题。

编译器中的错误是:

ValueTuple<(string loanID, decimal y, ...)> does not contain a definition for '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 上时,我可以正确地看到它:

有什么建议吗?

你的参数只有一个字段Item1因为它不是ValueTuple<...>类型,而是ValueTuple<ValueTuple<...>>类型:外ValueTuple is another ValueTuple, where this inner 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

为了完整起见,这里 general blog article and an in-depth blog article 关于 C# 7 中的元组。