Причина, по которой вы получаете ошибку «Использовать неназначенную локальную переменную GenStream», заключается в том, что вы объявили ее, когда вызываете genStream.Close () в блоке if, ему ничего не назначено просто декларация (воспринимайте ее как заполнитель).
Когда вы комментируете genStream.Close (), вы снова получаете ошибку в своем блоке else, потому что (с точки зрения области видимости блока else) ей снова ничего не было назначено.
Вот пример того, что я предлагал в своем последнем комментарии к вашему предыдущему сообщению:
foreach (var g in DistinctGenres)
{
FileStream fs = new FileStream(cPath + Path.DirectorySeparatorChar + g.Genre, FileMode.Create);
StreamWriter genStream = new StreamWriter(fs);
// Write your header here
foreach (var m in Genres)
{
// Generates the HTML for the Movie
// Writes the HTML to the stream
genStream.WriteLine(strMovie);
lineID = lineID == 0 ? 1 : 0;
}
string closingHTML = " </table>\r\n" + " </body>\r\n" + "</html>";
genStream.WriteLine(closingHTML);
genStream.Close();
}
Это устраняет необходимость проверки if и, как правило, упрощает то, что вы пытаетесь выполнить, ИМО.
Возможно, вам придется скорректировать два запроса или оставить первый запрос и выполнить второй запрос в зависимости от текущего жанра, для которого вы создаете веб-страницу.
Еще одна мысль - переместите второй запрос внутрь первого цикла foreach, назначьте текущий жанр переменной и настройте второй запрос следующим образом:
var moviesWithGenre = from g in distinctGenres
from m in mList
where m.Genres.Contains(currentGenre) // currentGenre is assigned a value in the first (outer) foreach loop
orderby g, m.Title
select new { Genre = g, Movie = m };