显式转换是否会修改对象

本文关键字:对象 修改 是否 显式转换 | 更新日期: 2023-09-27 18:35:49

(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]得到用户名。

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

显式转换是否会修改对象

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

如果您能够投射,则对象的行为将类似于当前数据类型,例如

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

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

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

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

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