Restituisce oggetto o dinamica da un metodo

1

Ho creato una libreria di query da stringa a linq per le esigenze interne dell'azienda. Utilizzeremo questa libreria principalmente per interrogare su REST, ma potrebbe essere utilizzata in molte altre situazioni diverse.

Il nocciolo di ciò è questo, un utente può creare una query e inserirla in una URL come questa:

www.test.com/api/v1/users?query= $ dove [#eq (Nome, Test) & & #gt (Id, 12345)] $ orderby [Nome, -Id]

ma potrebbero anche scrivere qualcosa di simile

www.test.com/api/v1/users?query= $ dove [#eq (Nome, Test) & & #gt (Id, 12345)] $ durare []

$ last [] restituisce un singolo oggetto, mentre

$ orderby [Nome, -Id] restituisce una raccolta

Nella libreria ho un metodo che accetterà quella stringa e di conseguenza produrrà una raccolta o un singolo oggetto, non sono sicuro se quel metodo debba restituire un tipo di Object o dynamic .

Quale è più adatto, quale sarà meno confusionario per altri sviluppatori?

Inoltre, sto pensando di rilasciare questa lib come open source, ma non so se c'è bisogno che qualcosa di simile venga rilasciato.

    
posta Nikola.Lukovic 03.05.2016 - 15:42
fonte

2 risposte

2

Invece di "ultimo", se hai implementato "orderbyDesc" e "prendi" (e forse anche "salta"), le tue query potrebbero sempre restituire raccolte, ma gli utenti capirebbero che per arrivare all'ultimo elemento di cui avrebbero bisogno recuperalo tramite $where[#eq(Name,Test)&&#gt(Id,12345)]$orderbyDesc[Name,-Id]$take[1]

Non cambierei la collezione in un singolo oggetto solo per il parametro finale, che sembra poco naturale. In C #, i metodi LINQ per saltare e prendere ancora restituiscono raccolte, quindi seguirò tale schema.

    
risposta data 03.05.2016 - 16:45
fonte
1

Dovresti leggere le differenze tra object e dynamic . Ecco alcune informazioni link e link

La più grande differenza è che il compilatore lascia il controllo dyanmic al runtime. Quindi gli errori del compilatore diventano eccezioni di runtime. Ad esempio, questo genera un errore del compilatore:

object abc = new object();
abc.BadCall(); //compiler error

Ma questo compila senza errori e genera un'eccezione RuntimeBinderException :

//VVVVV ----- only changed "object" to "dynamic"
dynamic abc = new object();
abc.BadCall(); //runtime exception here

Preferiresti avere un errore del compilatore rispetto a un'eccezione di runtime se avessi la scelta. Ecco qui.

Posso pensare a due usi per la parola chiave dynamic :

  1. Puoi usarlo per rendere Microsoft.Office.Interop.Excel chiama più leggibile .
  2. Puoi utilizzare come sostituzione al modello di progettazione dei visitatori .

Se la mia unica scelta era tra object e dynamic e potrei usarli in modo intercambiabile, sceglierei object .

    
risposta data 03.05.2016 - 18:09
fonte

Leggi altre domande sui tag