c# - vbnet - Procedura consigliata per verificare se DataRow contiene una determinata colonna




vbnet leggere datatable (2)

È possibile creare un metodo di estensione per renderlo più pulito:

static class DataRowExtensions
{
    public static object GetValue(this DataRow row, string column)
    {
        return row.Table.Columns.Contains(column) ? row[column] : null;
    }
}

Ora chiamalo come di seguito:

foreach(DataRow row in table)
    return yield new Thingy { Name = row.GetValue("hazaa") };

https://code.i-harness.com

Al momento, quando eseguo un'iterazione sulle istanze DataRow , lo faccio.

foreach(DataRow row in table)
  return yield new Thingy { Name = row["hazaa"] };

Prima o poi (cioè prima), farò mancare al tavolo l' asino della colonna e la cacca colpirà il ventaglio. Dopo alcune ricerche approfondite su google (circa 30 secondi) ho scoperto la seguente sintassi di protezione.

foreach(DataRow row in table)
  if(row.Table.Columns.Contains("donkey"))
    return yield new Thingy { Name = row["hazaa"] };
  else
    return null;

Ora - questa è la sintassi più semplice ?! Veramente? Mi aspettavo un metodo che mi mettesse in campo se esistesse o nullo altrimenti. O almeno un metodo Contiene direttamente sulla riga .

Mi sto perdendo qualcosa? In questo modo mapperò in molti campi in modo che il codice risulti terribilmente illeggibile ...


Dato che la tabella DataTable ha sempre le stesse colonne (non cambiano per nessuna riga), devi solo controllare il nome della colonna una volta.

if (table.Columns.Contains("donkey"))
{
    foreach ...
}




dataset