Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 57
  1. #1

    [C#] Ottenere una Classe dal suo nome passato come parametro String?

    Ciao, chiedo gentilmente se è possibile in C#, ottenere una Classe dal suo nome:

    <non l'istanza>, ma la classe proprio.

    Sarà banale penso,
    Faccio un esempio:

    codice:
    List<String> lista;
    Io non so che Classe sta al posto di "String", ma conosco il nome della classe.

    Grazie per eventuali risposte.


    jabjoint

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Basta usare GetType().
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,448
    Ma che vuoi dire?

    Che classe al posto di String? String È la classe

    Magari dicci anche a cosa ti serve così si capisce quello che cerchi...

    Il metodo GetType è quello che cerchi ma lo applichi all'istanza ovvero a list perché è l'istanza che è di una certa classe...

    Fai molta molta confusione

    Ops.. arrivato Alka prima, ma ci vuole pazienza
    Ultima modifica di oregon; 09-05-2023 a 20:04
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Ma che vuoi dire?

    Che classe al posto di String? String � la classe

    Magari dicci anche a cosa ti serve cos� si capisce quello che cerchi...

    Il metodo GetType � quello che cerchi ma lo applichi all'istanza ovvero a list perch� � l'istanza che � di una certa classe...

    Fai molta molta confusione

    Ops.. arrivato Alka prima, ma ci vuole pazienza
    Ok, grazie Oregon, fortunatamente "dovrebbe" essere "abbastanza" chiaro.

    Domani verifico. Grazie per la delucidazione.
    jabjoint

  5. #5
    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    Ok, grazie Oregon, fortunatamente "dovrebbe" essere "abbastanza" chiaro.

    Domani verifico. Grazie per la delucidazione.
    1 - Ottengo il type della prima classe che mi occorrre e ne creo un' instanza.
    2 - Invoco la chiamata ad una sua propriet�.
    3 - Devo eseguire il casting su un oggetto per leggerne le propriet� quindi
    dovrei ottenere il Type: DbSet<Articoli> da Object
    Come? Col Type.getType("",,,,....) e non sono ancora pratico ancora delle Func<>



    codice:
    //1
                Type typeClassContext = classe.GetType();
    //1
                object obj = Activator.CreateInstance(typeClassContext);
    //2
                object objX = obj.GetType().InvokeMember("Articoli", BindingFlags.Public | BindingFlags.NonPublic |
                BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
               
    //3
                DbSet<Articoli> y = (DbSet<Articoli>)objX;
    jabjoint

  6. #6
    Quote Originariamente inviata da alka Visualizza il messaggio
    Basta usare GetType().
    Intanto grazie.

    In realtà mi accorgo che io devo fare più precisamente una conversione da
    codice:
    Object a DbSet<ClasseX>
    Nel mio caso ClasseX = Articoli, ma potrei avere un'altra classe...Ordini, ad esempio.
    Quindi richiedo di ottenere la conversione per mezzo del nome passato come String.
    Era chiaro?
    Ultima modifica di jabjoint; 10-05-2023 a 07:18
    jabjoint

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,448
    Io personalmente non sto capendo nulla.
    Non si capisce cosa tu voglia fare nè perché e, soprattutto, all'interno di quale codice tu voglia farlo, quale sia il tuo intendimento finale, il tuo progetto.

    Devi mostrare del codice vero che parte da una linea e va avanti spiegando cosa deve fare alla fine.
    Non dare nulla di scontato ed esponi tutto senza abbreviare e senza fare salti logici.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,516
    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    Ciao, chiedo gentilmente se è possibile in C#, ottenere una Classe dal suo nome:

    <non l'istanza>, ma la classe proprio.

    Sarà banale penso,
    Faccio un esempio:

    codice:
    List<String> lista;
    Io non so che Classe sta al posto di "String", ma conosco il nome della classe.

    Grazie per eventuali risposte.


    Dal momento che parli a monosillabe e sei reticente a dare qualche spiegazione in più, accetta il fatto che anche chi ti risponde potrebbe essere irritato o povero di comprensione o risposte.
    Dal momento che stai mettendo una marea di post che girano intorno ad un qualcosa che mi pare di capire bene dove voglia andare a parare ma non ti esprimi, lascerò che ci arrivi da solo...

    Questo per rispondere alla tua domanda:
    codice:
    //Test
    Console.WriteLine(typeof(List<Test>).GetGenericArguments().First().Name);
    //oppure
    Console.WriteLine(typeof(List<Test>).GetGenericArguments()[0].Name);
    //Test1
    Console.WriteLine(typeof(Dictionary<Test,Test1>).GetGenericArguments().Last().Name);
    La risposta è semplice, ma il problema verrà dopo, quando arriverai a dover fare le cose "pulite" ed efficienti.
    Se poi vuoi parlare di quello che stai cercando di fare, potrei darti più informazioni e magari aiutarti (io ed eventualmente i miei colleghi). Ad esempio dovresti fare ricerche su una parola chiave: Generics. Ma quello che ruota intorno non è immediato. Comunque vedi tu.
    Ultima modifica di U235; 10-05-2023 a 10:31

  9. #9
    @U235:

    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    1 - Ottengo il type della prima classe che mi occorrre e ne creo un' instanza.
    2 - Invoco la chiamata ad una sua propriet�.
    3 - Devo eseguire il casting su un oggetto per leggerne le propriet� quindi
    dovrei ottenere il Type: DbSet<Articoli> da Object
    Come? Col Type.getType("",,,,....) e non sono ancora pratico ancora delle Func<>



    codice:
    //1
                Type typeClassContext = classe.GetType();
    //1
                object obj = Activator.CreateInstance(typeClassContext);
    //2
                object objX = obj.GetType().InvokeMember("Articoli", BindingFlags.Public | BindingFlags.NonPublic |
                BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
               
    //3
                DbSet<Articoli> y = (DbSet<Articoli>)objX;
    Probabimente non è semplice allora come credevo.

    Vediamo se riuscite a capire od io a spiegarmi meglio.

    La tua potrebbe essere una soluzione.

    Ma a me occorrono fortunatamente solo le proprietà di ogni classe C che qui sta per Articoli.

    Non so se è obbligatorio, ma generalmente per accedere alle precise proprietà di un oggetto occorre convertire l'oggeto generico che nell'esempio è objX nel oggetto particolare di cui si vogliono le proprietà.
    Altrimenti come dici tutto si complica, e dovrei scartare tutte le proprietà inutili.

    Ovviamente ho più classi Articoli(DbSet<Articoli>), ma il concetto rimane quello.
    Non penso che nel 2023 queste cose siano irrisolte o poche funzionanti/ottimizzate
    Ultima modifica di jabjoint; 10-05-2023 a 11:01
    jabjoint

  10. #10
    @Oregon
    Il fatto è che a fare questo, tutto si semplifica dopo, almeno penso.
    Da quello che posso intuire ovviamente.
    Se ho mille Tabelle/Oggetti da cui estrapolare i dati posso farlo subito.
    Indipendentemente dalla tabella.
    jabjoint

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2023 vBulletin Solutions, Inc. All rights reserved.