0

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

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

编译器中的错误是:

ValueTuple<(string loanID, decimal 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我可以正确看到它时: 在此处输入图像描述

有什么建议么?

4

1 回答 1

0

您的参数只有一个字段Item1,因为它不是 type ValueTuple<...>,而是 type :外部ValueTupleValueTuple<ValueTuple<...>>的单个类型参数是 another ,这个内部C# 元组现在包含您的,和字段。因此,在您的代码中,您必须编写才能访问这些字段。ValueTuplestringdecimalintstring 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 元组的一般博客文章和一篇深度博客文章。

于 2018-08-29T00:53:31.520 回答