显式转换是否会修改对象
本文关键字:对象 修改 是否 显式转换 | 更新日期: 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)