Почему я получаю "Не могу неявно преобразовать тип" void "в" объект "" с этим кодом (EPPlus)?

Я использовал этот код для заполнения ячейки в электронной таблице с помощью EPPlus:

using (var footerMonth1Cell = prodUsageWorksheet.Cells[columnFooterRow, MONTH1_COL])
{
    footerMonth1Cell.Value = monthsTruncatedYears[0];
    footerMonth1Cell.Style.Font.Size = DATA_FONT_SIZE;
    footerMonth1Cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
}

Я думал, что все работает нормально, но пользователь жаловался, что он производит "зеленые треугольники" в клетках. monthsTruncatedYears - это общий список строк.

Поэтому я добавил эту вспомогательную функцию:

public static void SetValueIntOrStr(this ExcelRangeBase range, object value)
{
    string strVal = value.ToString();
    if (!String.IsNullOrEmpty(strVal))
    {
        double dVal;
        int iVal;

        if (double.TryParse(strVal, out dVal))
            range.Value = dVal;
        else if (Int32.TryParse(strVal, out iVal))
            range.Value = iVal;
        else
            range.Value = strVal;
    }
    else
        range.Value = null;
}

... который я получил отсюда, а затем попытался изменить исходный код для вызова вспомогательной функции следующим образом:

using (var footerMonth1Cell = prodUsageWorksheet.Cells[columnFooterRow, MONTH1_COL])
{
    footerMonth1Cell.Value = SetValueIntOrStr(footerMonth1Cell, monthsTruncatedYears[0]);
    footerMonth1Cell.Style.Font.Size = DATA_FONT_SIZE;
    footerMonth1Cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
}

Тем не менее, он не будет компилироваться, говоря мне: "Не удается неявно преобразовать тип" void "в" объект ""

Так как второй аргумент, переданный SetValueIntOrStr(), а именно "значение", имеет тип объекта, я предполагаю, что это проблема. Так почему же компилятор, по-видимому, рассматривает monthTruncatedYears[0] как недействительный? В унаследованном коде я присвоил его в качестве значения ячейке, и тогда он не был пустым, поэтому...?!?

Я попытался привести второй аргумент к объекту следующим образом:

footerMonth1Cell.Value = ReportRunnerConstsAndUtils.SetValueIntOrStr(footerMonth1Cell, object(monthsTruncatedYears[0]));

... но это также не будет вычисляться с "недопустимым выражением" объект ""

... и эта похожая попытка:

footerMonth1Cell.Value = ReportRunnerConstsAndUtils.SetValueDoubleOrIntOrStr(footerMonth1Cell, monthsTruncatedYears[0] as object);

... выявляет, "не может неявно преобразовать тип 'void' в 'object'"

Обратите внимание, что вспомогательный метод фактически заимствован в заимствованном коде; вместо "SetValueIntOrStr" должно быть "SetValueDoubleOrIntOrStr"

1 ответ

Решение

Проблема в линии

footerMonth1Cell.Value = SetValueIntOrStr(footerMonth1Cell, monthsTruncatedYears[0]);

SetValueIntOrStr не возвращает никакого значения (void) и, следовательно, не может использоваться для присвоения значения footerMonth1Cell.Value,

Это будет действительный код, потому что свойство Value уже изменено внутри функции:

SetValueIntOrStr(footerMonth1Cell, monthsTruncatedYears[0]);
Другие вопросы по тегам