Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [C#] Funzione dinamica

  1. #1
    Utente di HTML.it L'avatar di EnSa
    Registrato dal
    Apr 2009
    Messaggi
    191

    [C#] Funzione dinamica

    Vorrei creare una funzione che mi restituisca un tipo di dati a seconda del valore:

    es:
    codice:
    public static Type GetValue(string name, string format)
    {
            switch (format)
                    {
                        case "Integer":
                            return  integer value
                        case "Boolean":
                            return boolean value
                        default:
                            return setting value
                    }
    }
    è possibile implementare una funzione del genere???

    Grazie mille

  2. #2
    La domanda è un po' strana, ad ogni modo una cosa del genere potrebbe andare:
    codice:
    private Type GetTypeFromValue(string s)
    {
    
        {bool i; if (bool.TryParse(s, out i)) return i.GetType();}
        {byte i; if (byte.TryParse(s, out i)) return i.GetType();}
        {Int16 i; if (Int16.TryParse(s, out i)) return i.GetType();}
        {Int32 i; if (Int32.TryParse(s, out i)) return i.GetType();}
        {Int64 i; if (Int64.TryParse(s, out i)) return i.GetType();}
        {Single i; if (Single.TryParse(s, out i)) return i.GetType();}
        {Double i; if (Double.TryParse(s, out i)) return i.GetType();}
    
        return s.GetType();
    }
    Chi non cerca trova.

  3. #3
    Utente di HTML.it L'avatar di EnSa
    Registrato dal
    Apr 2009
    Messaggi
    191
    dovrei salvare dei settaggi nel database e avevo pensato di strutturare la tabella nel seguente modo:

    ID
    Key
    TipoValore
    StringValue
    BoolValue
    IntValue

    e recuperare il valore della chiave a seconda del tipo ...


    non so se stò procedendo bene

    Qualche consiglio???

  4. #4
    Aaaaahhh... adesso mi è tutto più chiaro

    Ma perché non crei una tabella con tre semplici campi: ID, Key, Value, quest'ultimo di tipo testo? Salvi tutto in formato testo, poi quando devi recuperare il valore fai il cast al tipo necessario al contesto.
    Chi non cerca trova.

  5. #5
    Utente di HTML.it L'avatar di EnSa
    Registrato dal
    Apr 2009
    Messaggi
    191
    Grazie del consiglio ... non ci avevo pensato ...

    però mi sorge un problema:

    la mia funzione GetSetting(string key) recupera il valore dal database correttamente, ma nel caso in cui per esempio il valore non fosse trovato nel database mi restituisce string.empty


    tutto funziona correttamente per il recupero di dati di tipo string , mentre nel caso in cui dovessi recuperare un dato di tipo int e questo non dovesse essere trovato nel database non potrei convertire string.empty in 0

    qualche soluzione??

    vorrei evitare di controllare continuamente se la stringa è vuota ...

  6. #6
    Potresti fare una funzione leggermente diversa:
    GetSetting(key, default_value)
    In pratica con il parametro default_value passi il valore che vuoi ottenere qualora la chiave non venga trovata.
    Chi non cerca trova.

  7. #7
    Una soluzione più elegante che fa uso dei Generics:
    codice:
        static class Settings<T>
        {
            public static T GetValue(string key, T def_value)
            {
                //cerca il valore nella tabella dei Settings:
                //se la chiave esiste fa il cast del valore
                //altrimenti ritorna def_value
                if (condizione)
                    return (T)valore;
                else
                    return def_value;
            }
        }
    
    //utilizzo
    int i = Settings<int>.GetValue("numero", 0);
    string s = Settings<string>.GetValue("scritta", "");
    Chi non cerca trova.

  8. #8
    Utente di HTML.it L'avatar di EnSa
    Registrato dal
    Apr 2009
    Messaggi
    191
    utilizzando il consiglio che mi hai dato te mi ritorna il seguente errore:

    impossibile convertire il tipo string in T

  9. #9
    Posta il codice...
    Chi non cerca trova.

  10. #10
    Utente di HTML.it L'avatar di EnSa
    Registrato dal
    Apr 2009
    Messaggi
    191
    codice:
    public static class Settings<T>
    {
        public static T GetValue(string settingName, T defValue)
        {
            string prova= "asdasd";
            return (T)prova;
        }
    }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.