显式转换是否会修改对象?

时间:2013-10-18 04:15:01

标签: c# asp.net string server-variables explicit-conversion

(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]获取用户名。

显式转换是否会改变对象本身?

2 个答案:

答案 0 :(得分:0)

是的,当然,显式转换会更改对象。 首先,你不能将对象转换为字符串,C#不允许它。

如果能够强制转换,则对象的行为与当前数据类型相同,例如

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

输出:? 请注意,输出不是-1,因为行为已更改。

答案 1 :(得分: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项是相同的。

e.g。如果我运行这个自包含的例子:

        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]);

我得到:1st =(Tom),2nd =(Tom,Dick,Harry),3rd =(Tom)