像(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]
获取用户名。
显式转换是否会改变对象本身?
答案 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)