我有一个关于投射类型的愚蠢而又愚蠢的问题。从代码中我可以看到,我有一个变量 lprod_monthylReport ,取决于 ytm 值,可以是List<Monthly_Report>
,也可以只是Monthly_Report
。在这两种情况下,我都需要变量具有相同的名称。
var lprod_monthlyReport = new List<Monthly_Report>;
if (ytm == true)
{
lprod_monthlyReport = _ProductRep.GetSpecificArchiveReport(prod.Prod_ID, lmonth, lyear, item.item_ID);
}
else
lprod_monthlyReport = _ProductRep.GetSpecificYTMReport(prod.Prod_ID, item.item_ID);
问题在于,如果我在每个if(或其他)部分中声明变量,编译器会给出错误,因为它表示变量已在此上下文中声明。
我已经尝试过投射
lprod_monthlyReport = (Monthly_Report) _ProductRep.GetSpecificArchiveReport(prod.Prod_ID, lmonth, lyear, item.Item_ID);
但它不起作用。我还尝试了 as 关键字但没有成功。
请你帮帮我一下吗?感谢
Francesco
答案 0 :(得分:3)
这应该有效:
万一你有一个Monthly_Report
只需将它添加到列表中......
List<Monthly_Report> lprod_monthlyReport;
if (ytm == true)
{
lprod_monthlyReport = new List<Monthly_Report>();
lprod_monthlyReport.add(_ProductRep.GetSpecificArchiveReport(prod.Prod_ID, lmonth, lyear, item.item_ID));
}
else{
lprod_monthlyReport = _ProductRep.GetSpecificYTMReport(prod.Prod_ID, item.item_ID));
}
答案 1 :(得分:2)
第一行代码
var lprod_monthlyReport = new List<Monthly_Report>;
表示变量的类型为List<Monthly_Report>
,因此它不能包含单个Monthly_Report
对象。
此代码应重构为不同的工作方式,或者让一个方法返回List<Monthly_Report>
,其中只有一个Monthly_Report
。
答案 2 :(得分:1)
var
关键字的重要之处在于它并不代表“变体”。 var
用于编译器的类型推断,这意味着你声明的地方:
var something = new List<Something>();
...你宣称属于List<Something>
类型的东西。这意味着你不能这样做:
something = new Something();
...因为你已经宣布它是别的东西。从可用性的角度来看,var
是语法糖。编译器(和Visual Studio智能感知引擎)使用类型推断来了解something
实际上是List<Something>
。
答案 3 :(得分:0)
这不会起作用,唉。
但是如果你愿意的话,你可以将单个实例包装成一个列表。然后,您只需要让代码处理一个或多个List<Monthly_Report>
项的Monthly_Report
。
答案 4 :(得分:0)
试试这个
List<Monthly_Report> lprod_monthlyReport;
if (ytm == true)
{
lprod_monthlyReport = _ProductRep.GetSpecificArchiveReport(prod.Prod_ID, lmonth, lyear, item.item_ID);
}
else
{
lprod_monthlyReport = new List<Monthly_Report>()
{
_ProductRep.GetSpecificYTMReport(prod.Prod_ID, item.item_ID)
};
}
答案 5 :(得分:0)
将lprod_monthlyReport
声明为“对象”。 is
和Monthly_Report
之间没有List<Monthly_Report>
个关系。
当你来使用'lprod_monthlyReport'时会遇到问题因为你不知道它是什么类型,除了object之外,'is'关键字可以帮助你。
考虑一下并考虑重构代码。