Uważam za bardzo mylące, aby zrozumieć przejść przez odniesienie w języku C#. W moim kodu mam funkcję, która przyjmuje dwa parametryProblemy ze zrozumieniem przekazać przez odniesienie
private bool SerialUnEscape(byte serialData, ref byte serialResult)
{
if (((SerialProcessValue)serialData == SerialProcessValue.SERIAL_PACKET_START) ||
((SerialProcessValue)serialData == SerialProcessValue.SERIAL_PACKET_END)) {
serialEscaped = false;
serialResult = 0;
return (true);
}
} else if (serialEscaped) {
if ((SerialProcessValue)serialData == SerialProcessValue.SERIAL_PACKET_ESCAPE_START) {
serialResult = (int)SerialProcessValue.SERIAL_PACKET_START;
serialEscaped = false;
return (true);
}
} else {
serialResult = serialData;
return (true);
}
}
Wołam funkcji z odniesieniem jako serialDataLsb
& serialDataMsb
.
Teraz moje zamieszanie jest o to, jaka byłaby wartość serialDataLsb
lub serialDataMsb
, Czy to uzyskać wartość serialResult
??
for (i = 0; i < serialElements; i++) {
serialDataLsb = 0;
serialDataMsb = 0;
while (serialBufferWalk < serialIndex) {
if (SerialUnEscape(serialBuffer[serialBufferWalk++], ref serialDataLsb)) {
break;
}
}
while (serialBufferWalk < serialIndex) {
if (SerialUnEscape(serialBuffer[serialBufferWalk++], ref serialDataMsb)) {
break;
}
}
serialElementData[i] = (UInt16)(serialDataLsb + (serialDataMsb << 8));
}
i muszę portu tego kodu w Pythonie, 1) w jaki sposób można wdrożyć podanie przez odniesienie w Pythonie
Próbowałem przy użyciu tej
while serialBufferWalk < serialIndex:
if self.SerialUnEscape(serialBuffer[serialBufferWalk += 1],serialDataLsb):
break
while serialBufferWalk < serialIndex:
if self.SerialUnEscape(serialBuffer[serialBufferWalk += 1],serialDataLsb):
break
C! = C# Proszę oznaczyć pytanie poprawnie następnym razem – Haris
Jeśli nie musisz przekazywać wartości do funkcji, rozważ użycie słowa kluczowego "out" (https://msdn.microsoft.com /en-us/library/t3c3bfhx.aspx) zamiast tego –
Wydaje mi się, że ten kod jest bardziej o Pythonie niż C#. Proponuję po prostu zwrócić krotkę z Python ... –