Изменяет ли явное преобразование объект?

Делает ли явное преобразование как (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, потому что поведение изменилось.

Другие вопросы по тегам