Tecnicamente è OK
Non c'è niente di sbagliato nell'usare il simbolo =
sia per l'assegnazione che come operatore (che restituisce il valore dell'assegnazione), ed è certamente legale e conciso. La domanda è se è chiaro e ciò dipenderà da chi lo sta leggendo.
Perché è evitato
Nella mia esperienza, la maggior parte degli sviluppatori evita il singolo =
in un'istruzione if
perché è un modo facile per commettere un errore e l'errore è spesso difficile da rilevare e ha un effetto molto negativo. Infatti Visual Studio ti avviserà solo perché è un problema molto comune. Penso che sia un segno abbastanza strong che dovresti evitarlo.
Questo è ancora peggio
Ciò che è veramente grave è quando l'operatore viene utilizzato più avanti in un'espressione in cortocircuito, come questo:
if (condition1 | model.MyBoolean = condition2) {}
Quanto sopra funzionerà, ma non lo farà:
if (condition1 || model.MyBoolean = condition2) {}
Se condition1 è falso, l'assegnazione non avverrà !!! Ciò potrebbe non essere ovvio per chi sta modificando il codice e può facilmente introdurre un errore logico catastrofico.
Cosa potrebbe essere OK
D'altra parte, l'utilizzo di% singolo=
come questo non è raro in certi altri costrutti, come ad esempio in un ciclo while:
while (bytesRead = streamReader.Read(buffer, x, y) > 0)
{
//Do something with the buffer
}
Il ciclo precedente leggerà byte da un flusso e registrerà la lunghezza dei byte letti, e uscirà dal ciclo se bytesRead
è zero.
Ho visto questo costrutto dappertutto. Perché mi è familiare, è abbastanza chiaro per me, e finora non mi ha causato alcuna confusione quando l'ho incontrato.
Linea inferiore
Devi decidere autonomamente se il tuo codice è chiaro. Secondo me (e Microsoft), non lo è, e non lo farei, ma forse la tua squadra è diversa. Poi di nuovo probabilmente è meglio sbagliare con cautela.
Ho capito che vuoi essere conciso. Penso che la maggior parte dei poster su questo forum pensi che la concisione sia molto, molto meno importante della chiarezza. Inoltre, ecco un post sul blog sulla stesura di "Really Obvious Code" e perché è una buona idea. Il tuo codice non è davvero ovvio.