Разница между кастингом и разбором - PullRequest
2 голосов
/ 17 мая 2011

Я некоторое время работал над кодом. сейчас я просто использовал ключевые слова как есть, не понимая их. Так вот мой вопрос

В чем разница между приведением и разбором?

UserAdapter.GetIdAndUserTypeByEmailAndPassword(Email, Password).Rows[0]["UserType"] as String -> это литье или разбор?

(String) UserAdapter.GetIdAndUserTypeByEmailAndPassword(Email, Password).Rows[0]["UserType"] -> это литье или разбор?

UserAdapter.GetIdAndUserTypeByEmailAndPassword(Email, Password).Rows[0]["UserType"].ToString()
В чем разница между x.ToString() и (String) x?

Ответы [ 2 ]

11 голосов
/ 17 мая 2011

В чем разница между приведением и разбором?

Это не связано.

Приведение изменяет тип переменной.

Синтаксический анализ - это "проверка" строки и присвоение ее логического значения некоторой переменной.

(ДОПОЛНЕНИЕ: Ну, в некотором смысле они связаны, потому что издалека оба могут служить для «преобразования» данных, однако данные действительно конвертируются ТОЛЬКО в случае анализа)

UserAdapter.GetIdAndUserTypeByEmailAndPassword(Email, Password).Rows[0]["UserType"] as String

это кастинг или разбор?

Это особый тип приведения, который не завершится неудачей, если типы не конвертируемы (см. здесь ), но даст вам null.

(String) UserAdapter.GetIdAndUserTypeByEmailAndPassword(Email, Password).Rows[0]["UserType"]

это литье или разбор?

Это снова приведение, но выдаст исключение, если выражение не относится к типу string.

В чем разница между x.ToString () и (String) x?

x.ToString() попытается вызвать ToString () для объекта x.

(String) x попытается привести x к строке, и потерпит неудачу, если x не является строкой.

0 голосов
/ 17 мая 2011

для идеи теста, пожалуйста, проверьте ссылку ниже.

http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/57518616-a142-4e89-99c9-e2fa6b01ef6f

...