如链接所示:http://msdn.microsoft.com/en-us/library/bb383973.aspx
...隐式类型的局部变量是强类型的,就像您自己声明类型一样,但编译器确定类型...
但是我有这样一段代码:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["user"] == null) Response.Redirect("Default.aspx");
StringBuilder sb = new StringBuilder();
foreach (var item in Session)
{
sb.Append("Session Parameter: [");
sb.Append(item);
sb.Append("]<p />Guid Value: [");
sb.Append(Session[item] + "]");
}
Response.Write(sb.ToString());
}
我在 Visual Studio 中遇到这样的错误:
参数 1:无法将行从“对象”转换为“字符串”:
sb.Append(Session[item] + "]");
但是当我在调试器中查看时,item
在运行时被识别为 string
类型。
当我在 msdn/in books 上阅读有关 var
的内容时,我认为 var
与 RTTI-stuff 无关。编译器只是在编译时将这种隐式类型的变量更改为显式类型,如 string、int
等。
为什么会出现这样的错误?
最佳答案
A var
C# 中的声明是强类型的,但在这种情况下,您处理的是值 Session
中的非泛型集合类型。 .这导致 C# 选择 object
对于 item
的类型因此,您在尝试使用 item
时会遇到稍后的错误在需要 string
的位置.
对于非泛型集合,您仍需要在 foreach
中显式键入迭代器变量 block
foreach(string item in Session) {
...
}
关于C# var 有强类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15306301/