Используйте p.poll()
или, если вам нужно проверить вывод, используйте subprocess.PIPE
для стандартного выхода и select()
на p.stdout
.
Вам нужно только переопределить GetHashCode () для ссылочных типов, если вы переопределяете Object.Equals ().
Причина этого проста - обычно 2 ссылки всегда будут отличаться (a.Equals (b) == false, если только они не являются одним и тем же объектом) ). Реализация по умолчанию GetHashCode () предоставит 2 различных хеша в этом случае, так что все хорошо.
Однако, если вы переопределите Equals (), это поведение не гарантируется. Если два объекта равны (согласно Equals ()), вы должны гарантировать, что они будут иметь одинаковый хеш-код с GetHashCode, поэтому вы должны переопределить его.
Я только что сделал пример теста, и я не вижу, как он начинается с 1 и получает приращение.
for (int i = 0; i < 16; i++)
{
object obj = new object();
Console.Write(obj.GetHashCode() + " ");
}
с такими результатами:
45653674 41149443 39785641 45523402 35287174 44419000 52697953 22597652
10261382 59109011 42659827 40644060 17043416 28756230 18961937 47980820
На самом деле, используя Reflector, я мог видеть только следующее:
internal static extern int InternalGetHashCode(object obj);
Итак, как это на самом деле происходит, для меня загадка (может быть шаблон, но я не собираюсь копать глубже в этой точке - может быть, какой-то алгоритм «псевдослучайного числа» ?). Кто-то из команды CLR мог бы ответить на этот вопрос.
Что касается других вопросов, то Рид действительно побил меня: « GetHashCode
и « Равно »
. На странице MSDN это описано с несколькими более кровавыми подробностями, на всякий случай.
Взгляните на комментарий, который я оставил к статье: Метод расширения GetHashCode