我只是将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;
}
有什么建议吗?
答案 0 :(得分:0)
您的参数只有一个单一字段Item1
,因为它不是ValueTuple<...>
类型,而是类型ValueTuple<ValueTuple<...>>
:外部ValueTuple的单一类型参数是另一个ValueTuple
,其中内部C# tuple现在包含您的string
,decimal
和int
字段。
因此,您必须在代码中编写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 article和in-depth blog article。