foreach没有初始化循环变量

时间:2010-03-09 13:22:55

标签: c# asp.net

我正在使用foreach在ASP.NET MVC的Partial View中循环遍历IList对象。

这是整个代码(消息是模型中的一个类)。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IList<Message>>" %>

<%
if (ViewData.Model.Count > 0)
{
    foreach (MvcTest.Models.Message m in ViewData.Model)
    {
        Response.Write(m.RenderHtml()); 
    }
}

%>

由于某种原因,这会在ResponseWrite上生成一个CS0165 - 抱怨m可能没有初始化。

我改写了这样的话:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IList<Message>>" %>

<%
//Can't see why I have to declare this as a variable, but I get CS0165 if I use ViewData.Model directly in the foreach
IList<MvcTest.Models.Message> messages = ViewData.Model;
if (messages.Count > 0)
{
    foreach (MvcTest.Models.Message m in messages)
    {
        Response.Write(m.RenderHtml()); 
    }
}

%>

即明确声明IList的变量而不仅仅使用(强类型)模型,它工作正常。

任何人都能解释为什么我所做的解决了这个问题吗?

1 个答案:

答案 0 :(得分:3)

尝试将Inherits声明更改为

Inherits="System.Web.Mvc.ViewUserControl<System.Collections.Generic.IList<MvcTest.Models.Message>>" 
但是,我不确定它是否会有所帮助。