为什么我得到 "Cannot implicitly convert type 'void' to 'object'" 这个代码 (EPPlus)?
Why am I getting, "Cannot implicitly convert type 'void' to 'object'" with this code (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;
}
我认为它工作正常,但一位用户抱怨它在细胞中产生 "green triangles"。 "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;
}
...这是我从 here 获得的,然后尝试重构原始代码以调用该辅助函数,如下所示:
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' 隐式转换为 'object'”
由于传递给 SetValueIntOrStr() 的第二个 arg,即 "value",是对象类型,我认为这就是问题所在。那么为什么编译器显然将 monthsTruncatedYears[0] 视为无效呢?在遗留代码中,我将其作为值分配给单元格,当时它不是无效的,所以...?!?
我试过像这样将第二个参数转换为对象:
footerMonth1Cell.Value = ReportRunnerConstsAndUtils.SetValueIntOrStr(footerMonth1Cell, object(monthsTruncatedYears[0]));
...但这也不会计算 "Invalid expression term 'object'"
...以及类似的尝试:
footerMonth1Cell.Value = ReportRunnerConstsAndUtils.SetValueDoubleOrIntOrStr(footerMonth1Cell, monthsTruncatedYears[0] as object);
...引出,"Cannot implicitly convert type 'void' to 'object'"
请注意,辅助方法实际上在借用的代码中命名错误;而不是 "SetValueIntOrStr" 应该是 "SetValueDoubleOrIntOrStr"
问题是线路
footerMonth1Cell.Value = SetValueIntOrStr(footerMonth1Cell, monthsTruncatedYears[0]);
SetValueIntOrStr
没有 return 任何值(无效),因此不能用于为 footerMonth1Cell.Value
.
赋值
这将是有效代码,因为值 属性 已在函数内部更改:
SetValueIntOrStr(footerMonth1Cell, monthsTruncatedYears[0]);
我使用此代码通过 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;
}
我认为它工作正常,但一位用户抱怨它在细胞中产生 "green triangles"。 "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;
}
...这是我从 here 获得的,然后尝试重构原始代码以调用该辅助函数,如下所示:
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' 隐式转换为 'object'”
由于传递给 SetValueIntOrStr() 的第二个 arg,即 "value",是对象类型,我认为这就是问题所在。那么为什么编译器显然将 monthsTruncatedYears[0] 视为无效呢?在遗留代码中,我将其作为值分配给单元格,当时它不是无效的,所以...?!?
我试过像这样将第二个参数转换为对象:
footerMonth1Cell.Value = ReportRunnerConstsAndUtils.SetValueIntOrStr(footerMonth1Cell, object(monthsTruncatedYears[0]));
...但这也不会计算 "Invalid expression term 'object'"
...以及类似的尝试:
footerMonth1Cell.Value = ReportRunnerConstsAndUtils.SetValueDoubleOrIntOrStr(footerMonth1Cell, monthsTruncatedYears[0] as object);
...引出,"Cannot implicitly convert type 'void' to 'object'"
请注意,辅助方法实际上在借用的代码中命名错误;而不是 "SetValueIntOrStr" 应该是 "SetValueDoubleOrIntOrStr"
问题是线路
footerMonth1Cell.Value = SetValueIntOrStr(footerMonth1Cell, monthsTruncatedYears[0]);
SetValueIntOrStr
没有 return 任何值(无效),因此不能用于为 footerMonth1Cell.Value
.
这将是有效代码,因为值 属性 已在函数内部更改:
SetValueIntOrStr(footerMonth1Cell, monthsTruncatedYears[0]);