将对象T转换为C#</t>中的List <t>

时间:2011-04-14 12:54:55

标签: c# .net generics collections casting

我有一个关于投射类型的愚蠢而又愚蠢的问题。从代码中我可以看到,我有一个变量 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

6 个答案:

答案 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声明为“对象”。 isMonthly_Report之间没有List<Monthly_Report>个关系。

当你来使用'lprod_monthlyReport'时会遇到问题因为你不知道它是什么类型,除了object之外,'is'关键字可以帮助你。

考虑一下并考虑重构代码。