Изменяет ли явное преобразование объект?
Делает ли явное преобразование как (string)object
изменит сам объект? Когда я пишу код в Visual C# в ASP.NET, я встретил странную вещь:
Я печатаю:
NameValueCollection coll;
coll = Request.ServerVariables;
LoginStatue1.Text += coll.GetValues("REMOTE_USER")[0] + "." + (string)coll["REMOTE_USER"] + "." + coll.GetValues("REMOTE_USER")[0];
Результат
..username
Это означает, что первый coll.GetValues("REMOTE_USER")[0]
не получает ничего, пока после (string)coll["REMOTE_USER"]
, второй coll.GetValues("REMOTE_USER")[0]
получить имя пользователя.
Таким образом, явное преобразование изменяет сам объект?
2 ответа
Чтобы прояснить ситуацию, я бы предложил попробовать что-то вроде этого:
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]);
Я получаю: 1-й =(Том),2-й =(Том, Дик, Гарри),3-й =(Том)
Да, конечно, явное преобразование меняет объект. Прежде всего, вы не сможете приводить объекты в строку, C# не позволяет этого.
Если вы можете выполнить приведение, объект будет вести себя как текущий тип данных, например,
class Program
{
static void Main(string[] args)
{
int i = 0;
char j = (char)i;
j--;
Console.WriteLine(j);
}
}
Выход:? Обратите внимание, что вывод не -1, потому что поведение изменилось.