ValueTuple <(строка loanID, десятичный x, ...)> не содержит определения для loanID в c # - PullRequest
0 голосов
/ 28 августа 2018

Я просто передаю ValueTuple в функцию. Я хочу обработать значения в этом ValueTuple.

К сожалению, VS 2017 только позволяет мне получить доступ к credit.Item1. Нет больше предметов. До сих пор у меня не было проблем с ValueTuples.

Ошибка в компиляторе:

ValueTuple <(строка loanID, десятичный 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 голосов
/ 29 августа 2018

Ваш параметр имеет только одно поле Item1, так как оно относится не к типу ValueTuple<...>, а к типу ValueTuple<ValueTuple<...>>: единственный тип параметра внешнего ValueTuple является другим ValueTuple, где этот внутренний C # кортеж теперь содержит ваши поля 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.

...