Почему я получаю "Не могу неявно преобразовать тип" 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]);