#c# #sockets #error-handling
#c# #сокеты #обработка ошибок
Вопрос:
Всегда ли ErrorCode и SocketErrorCode имеют одно и то же значение, но представлены как разные типы?
Описание класса SocketException дает им в основном идентичные описания, но я не вижу явного указания на то, что они имеют одинаковое значение.
SocketErrorCode кажется более полезным, поскольку это перечисление, которое вы можете сделать более красивым кодом, например:
if(se.SocketErrorCode == SocketError.Interrupted)
вместо:
if (se.ErrorCode != 10004)
или
if (se.ErrorCode != (int)SocketError.Interrupted)
Ответ №1:
Да, они точно такие же.
Смотрим на исходный код:
public override int ErrorCode {
//
// the base class returns the HResult with this property
// we need the Win32 Error Code, hence the override.
//
get {
return NativeErrorCode;
}
}
public SocketError SocketErrorCode {
//
// the base class returns the HResult with this property
// we need the Win32 Error Code, hence the override.
//
get {
return (SocketError)NativeErrorCode;
}
}
Комментарии:
1. Это преобразование происходит каждый раз, когда вы вызываете SocketErrorCode, но хотелось бы надеяться, что вы не получаете ошибок в контексте, чувствительном к производительности.