|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
[C#/2.0]Restituire valore solo se non nullo
allora, leggendo diversi vostri post, sto provando anche io ad aderire alla campagna anti-if ...
ho questa situazione: Codice:
private double GetCellValue(int cellNumber) { return double.Parse(grid.CurrentRow.Cells[cellNumber].Value.ToString()); } Se trova un valore nullo, ovvero una cella vuota, mi sparafracassa i maroni chiedendomi di creare una nuova istanza dell'oggetto.. allora, dovrei fare così: Codice:
private double GetCellValue(int cellNumber) { if(grid.CurrentRow.Cells[cellNumber].Value != null) return double.Parse(blabla) else return 0.00 } ![]() Come potrei risolvere? Grazie mille ![]() RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
qusta è la prima volta la sento nominare
![]()
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
con il try - catch?
Ma sempre se è un campo obbligatorio e quindi è giusto che debba lanciare un eccezione, altrimenti se è un campo facoltativo devi comunque usare l'if a meno di non riscriverti il controllo di windows in ottica "anti-if" così ad occhio... ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Codice:
private double GetCellValue(int cellNumber) { try { return double.Parse(grid.CurrentRow.Cells[cellNumber].Value.ToString()); } catch { return 0; } } |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
![]() chiedo venia ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Usare double.TryParse?
Così nascondi l'if sotto il tappeto (del framework). |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
La maggior parte degli if non si usano per verificare il tipo di un oggetto ma per stabilire se è nullo o ha un valore ben definito. Senza gli if in questo caso il codice è meno leggibile e almeno con il C# finisce che per fare veloce il codice si legge al contrario perchè prima viene il codice che andrebbe dentro l'if/else e poi il check della condizione. In ogni caso è sempre più lungo da scrivere di un banale if. |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
Il problema è quando, come in questo caso, si devono utilizzare componenti che *possono* restituire null anche in casi non eccezionali. Se, ad esempio, alla MS avessero previsto un flag "obbligatorio" per quel componente, e avessero consentito di associarlo ad un ben determinato tipo di dato, anzichè utilizzare il generico string, sarebbe stato possibile restituire il valore di default corretto e si sarebbe potuto eliminare quell'if.
__________________
![]() |
|
![]() |
![]() |
![]() |
#10 | ||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Me ne sono accorto quando mi sono imposto di creare un parser per i log di pureFTP assolutamente senza if. E' velocissimo ad eseguire (che era l'obiettivo principale), quanto al codice si legge al contrario, inoltre ci ho messo molto più tempo a scriverlo. Per quanto mi riguarda l'if lo uso in casi come: if (i < x) if (IsEnabled()) E spesso quando si hanno a che fare con intervalli di valori creare le mappe diventa complicato. Quote:
Per questo esiste il metodo TryParse che restituisce true o false se la conversione è avvenuta con successo. |
||
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
Se anzichè usare questo meccanismo si fosse utilizzato un componente cosciente del tipo di dato che dovrà contenere, allora si sarebbe potuta eliminare la necessità dell'if perchè semplicemente non sarebbe stata necessaria alcuna conversione dato che il componente avrebbe restituito direttamente un double o un int o qualsiasi altra cosa a seconda del tipo di dato.
__________________
![]() |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
facendo un pò di chiarezza:
l'oggetto in questione è una griglia, e l'operazione che devo svolgere è una banale somma o differenza tra i valori contenuti nelle celle. Il fatto è che questa operazione deve avvenire in corrispondenza di un evento, ovvero quando si lascia la cella corrente per scrivere in quella successiva. Sono quindi incappato in questo problema, ovvero, lasciando la cella corrente, supponiamo la cella 3, che contiene 12,79, andando in quella successiva (quindi già sono nell'evento di EndEdit) mi ritrovo già che 12,79 cerca di sottrarsi o addizionarsi ad un valore ancora non presente nell'evento BeginEdit della cella. Avrei potuto risolvere il tutto comodamente settando a zero il valore di default di ogni cella, ma, ripeto, dato che è solo per studio, cerco di vedere lo stesso problema sotto diversi punti di vista, cercando di volta in volta di non adottare quello che già conosco, ma cercando di fare qualcosa di nuovo a scopo didattico ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
|
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
|
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
![]() Ad esempio utilizzando una DataGridView puoi già specificare il tipo di dato di ogni colonna, e non mi pare ci siano problemi di sorta... ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Ovviamente si facendo come sto facendo io, ovvero senza dire a priori al datagridview che tipo di valori ci saranno nelle celle.
P.S.: con il datagridview puoi tranquillamente settare il tipo di valore per ogni colonna. Dispone di eventi che ne facilitano moltissimo l'utilizzo. Eventi appunto... che NON sto usando ma solo per imparare ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:26.