0

显式转换(string)object会修改对象本身吗?当我在 ASP.NET 中使用 Visual C# 进行编码时,我遇到了一件奇怪的事情:

我输入:

NameValueCollection coll;
coll = Request.ServerVariables;
LoginStatue1.Text += coll.GetValues("REMOTE_USER")[0] + "." + (string)coll["REMOTE_USER"] + "." + coll.GetValues("REMOTE_USER")[0];

结果是

..用户名

这意味着第一个coll.GetValues("REMOTE_USER")[0]在之后没有得到任何东西(string)coll["REMOTE_USER"],第二个coll.GetValues("REMOTE_USER")[0]得到用户名。

那么显式转换会改变对象本身吗?

4

2 回答 2

0

为了让事情更清楚,我建议尝试这样的事情:

LoginStatue1.Text =  string.Format("1st=({0}),2nd=({1}),3rd=({2})", 
coll.GetValues("REMOTE_USER")[0],  
(string) coll["REMOTE_USER"], 
coll.GetValues("REMOTE_USER")[0]);

结果是什么?我希望第 1 项和第 3 项是相同的。

例如,如果我运行这个自包含的示例:

        NameValueCollection  coll;
        coll = new NameValueCollection();
        coll.Add("REMOTE_USER", "Tom");
        coll.Add("REMOTE_USER", "Dick");
        coll.Add("REMOTE_USER", "Harry");
        LoginStatue1.Text =  string.Format("1st=({0}),2nd=({1}),3rd=({2})", coll.GetValues("REMOTE_USER")[0],  (string) coll["REMOTE_USER"], coll.GetValues("REMOTE_USER")[0]);

我得到:第一=(汤姆),第二=(汤姆,迪克,哈利),第三=(汤姆)

于 2013-10-18T05:36:31.487 回答
0

是的,当然,显式转换会更改对象。首先,您将无法将对象转换为字符串,C# 不允许这样做。

如果您能够强制转换,则该对象的行为将类似于当前数据类型,例如

class Program
{
    static void Main(string[] args)
    {
        int i = 0;
        char j = (char)i;
        j--;
        Console.WriteLine(j);
    }
}

输出: ?请注意,输出不是 -1,因为行为发生了变化。

于 2013-10-18T05:12:42.483 回答