Преобразование объекта T в список <T>в C # - PullRequest
1 голос
/ 14 апреля 2011

У меня глупая, но все же проблема с умственными способностями в отношении типов приведения.Как видно из кода, у меня есть переменная lprod_monylReport , которая в зависимости от значения 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 (или else), компилятор выдаст ошибку, потому что он говорит, что переменнаяуже объявлено в этом контексте.

Я уже пробовал кастовать

lprod_monthlyReport = (Monthly_Report) _ProductRep.GetSpecificArchiveReport(prod.Prod_ID, lmonth, lyear, item.Item_ID);

Но это не работает.Я также безуспешно попробовал ключевое слово как .

Можете ли вы помочь мне с этим?Спасибо

Франческо

Ответы [ 6 ]

3 голосов
/ 14 апреля 2011

Это должно работать: если у вас есть 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));
    }
2 голосов
/ 14 апреля 2011

Первая строка кода

var lprod_monthlyReport = new List<Monthly_Report>;

означает, что переменная имеет тип List<Monthly_Report>, поэтому она не может содержать один объект Monthly_Report.

Этот код должен быть изменен наработать по-другому, или этот метод возвращает List<Monthly_Report> с одним Monthly_Report.

1 голос
/ 14 апреля 2011

Важным моментом в ключевом слове var является то, что оно не означает "вариант". var используется компилятором для вывода типа, что означает, где вы объявляете:

var something = new List<Something>();

... вы объявляете что-то типа List<Something>. Это значит, что вы не можете сделать:

something = new Something();

... как вы уже заявили, что-то еще. var с точки зрения удобства использования - синтаксический сахар. Компилятор (и средство intellisense Visual Studio) используют вывод типа, чтобы знать, что something на самом деле List<Something>.

0 голосов
/ 14 апреля 2011

объявить lprod_monthlyReport как «объект».Не существует отношения is между Monthly_Report и List<Monthly_Report>.

. У вас будут проблемы, когда вы будете использовать lprod_monthlyReport, потому что вы не будете знать, какой это тип, кроме объекта,Тогда вам может помочь ключевое слово «is».

Подумайте об этом и подумайте о реструктуризации вашего кода.

0 голосов
/ 14 апреля 2011

Попробуйте это

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)
    };
}
0 голосов
/ 14 апреля 2011

Это не сработает, увы.

Но вы можете в качестве альтернативы обернуть один экземпляр в список, если хотите. Тогда вам нужно только заставить свой код иметь дело с List<Monthly_Report> из одного или нескольких Monthly_Report элементов.

...