リンクのように: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: 行の 'object' から 'string' に変換できません:
sb.Append(Session[item] + "]");
しかし、デバッガーで見たように、item
実行時に型として識別しています。string
msdn/in 本で読んだとき、それは RTTI とは関係ないvar
と思いました。コンパイラは、コンパイル時に etc のvar
ように明示的に型を指定して変数を変更するだけです。string, int
なぜそのようなエラーをキャッチしたのですか?