utilizzando "IS" è migliore o verificando "NOT NULL"

2

In linguaggio C # .NET: questo stile di codifica è consigliato o quello sottostante?

        if (sheet.Models.Data is GroupDataModel)
        {
            GroupDataModel gdm = (GroupDataModel)sheet.Models.Data;
            Group group = gdm.GetGroup(sheet.ActiveCell.Row.Index);   
            if (group!=null && controller != null)
            {
                controller.CheckApplicationState();
            }
        }

o questo:

        var gdm = sheet.Models.Data as GroupDataModel;
        if (gdm != null)
        {
            Group group = gdm.GetGroup(sheet.ActiveCell.Row.Index);   
            if (@group!=null && controller != null)
            {
                controller.CheckApplicationState();
            }
        }
    
posta Blake 30.10.2012 - 20:50
fonte

3 risposte

7

Se intendi lanciare (o usare as ) se il risultato della chiamata di is è true , dovresti chiamare as ed evitare due tentativi di lancio.

Preferisco la seconda versione per questo motivo.

    
risposta data 30.10.2012 - 20:53
fonte
1

In breve, se sai già che tipo può trasmettere a usa un cast di tipo C :

var o = (string) iKnowThisIsAString; 

Si noti che solo con un cast in stile C è possibile eseguire una coercizione di tipo esplicita. Se non sai se è il tipo desiderato e lo userai se lo è, usa come parola chiave:

var txt = o as string;
if (txt != null) return txt.Replace("_","-");

//or for early return:
if (txt == null) return;

Tieni presente che come non chiamerà alcun operatore di conversione di tipi. Sarà solo non nullo se l'oggetto non è nullo e nativo del tipo specificato.

    
risposta data 30.10.2012 - 20:57
fonte
1

Fondamentalmente, sono due cose diverse. Ma cosa pensi che legge meglio?

if (sheet.Models.Data is GroupDataModel) 

o

var gdm = sheet.Models.Data as GroupDataModel;
if (gdm != null)

Hai la tua risposta qui. Oded ha fatto un punto molto valido, ma la programmazione non è molto diversa dalla scrittura di articoli. Deve essere facilmente leggibile da altri ingegneri.

    
risposta data 31.10.2012 - 00:07
fonte

Leggi altre domande sui tag