C# var 有强类型吗?

标签 c# runtime type-conversion var rtti

如链接所示: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/

相关文章:

c# - 如何使用 MailKit 删除 Gmail 中的邮件(不移至垃圾箱文件夹)

在 C 中将 int 转换为 char?

c++ - 为什么允许从对象到引用的隐式转换?

c# - .NET 中的 "open generic type"到底是什么?

c# - 在 ASP.NET 中, 'ASP' 代码叫什么?

c# - 使用空值连接的 LINQ to SQL 字符串

java - 在运行时测试/更改 java 源

python - 运行时警告: invalid value encountered in power while plotting poisson distribution

java - 从 java 应用程序执行 Lynx

c++ - 将 Cxx vector 转换为 Julia vector