Ottenere config elemento da ConfigurationElementCollection

Ho (si spera) il programma di installazione ConfigurationElementCollection di un mio disegno con e-mail come chiavi. Ora che cosa? Difficile da trovare in realtà sul web. Come faccio a:

  1. scorrere attraverso di essa?

  2. Vedere se un determinato elemento non esiste?

  3. ottenere un elemento specifico?

…data:

    YourConfigElement config = 
   ConfigurationManager.GetSection("YourSectionName") as YourConfigElement;

Risposta parziale

1.

 foreach (X x in config.XCollection) 
             <code here>

2 . sostituire “codice” con

 { 
    if (x.Y == needle) 
    {
       hasIndeed = true;
       break;
    }
 }

3 . sostituire “codice” con

 { if (x.Y == needle) 
       cameUpWith = x;
       break;
 }

Piccolo odore.

InformationsquelleAutor Martin | 2010-05-06



2 Replies
  1. 8

    Ciò che si vuole è la vostra generico ConfigurationElementCollection di base di classe che implementa IList<T>. Si può quindi ereditare da questa per tutta la tua configurazione di collezioni e di ridurre la quantità di lavoro che è necessario fare quando si crea configurazione collezioni.

    public abstract class BaseConfigurationElementCollection<TConfigurationElementType> : ConfigurationElementCollection, IList<TConfigurationElementType> where TConfigurationElementType : ConfigurationElement, IConfigurationElementCollectionElement, new()
    {
        protected override ConfigurationElement CreateNewElement()
        {
            return new TConfigurationElementType();
        }
    
        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((TConfigurationElementType)element).ElementKey;
        }
    
        public IEnumerator<TConfigurationElement> GetEnumerator()
        {
            foreach (TConfigurationElement type in this)
            {
                yield return type;
            }
        }
    
        public void Add(TConfigurationElementType configurationElement)
        {
            BaseAdd(configurationElement, true);
        }
    
        public void Clear()
        {
            BaseClear();
        }
    
        public bool Contains(TConfigurationElementType configurationElement)
        {
            return !(IndexOf(configurationElement) < 0);
        }
    
        public void CopyTo(TConfigurationElementType[] array, int arrayIndex)
        {
            base.CopyTo(array, arrayIndex);
        }
    
        public bool Remove(TConfigurationElementType configurationElement)
        {
            BaseRemove(GetElementKey(configurationElement));
    
            return true;
        }
    
        bool ICollection<TConfigurationElementType>.IsReadOnly
        {
            get { return IsReadOnly(); }
        }
    
        public int IndexOf(TConfigurationElementType configurationElement)
        {
            return BaseIndexOf(configurationElement);
        }
    
        public void Insert(int index, TConfigurationElementType configurationElement)
        {
            BaseAdd(index, configurationElement);
        }
    
        public void RemoveAt(int index)
        {
            BaseRemoveAt(index);
        }
    
        public TConfigurationElementType this[int index]
        {
            get
            {
                return (TConfigurationElementType)BaseGet(index);
            }
            set
            {
                if (BaseGet(index) != null)
                {
                    BaseRemoveAt(index);
                }
                BaseAdd(index, value);
            }
        }
    }

    Con un po ‘ di lavoro in più, si può avere un dizionario di raccolta.

  2. 2

    Non ho assolutamente capire che cosa i vostri problemi sono – ma in fondo, se si dispone di una configurazione personalizzata elemento, si dovrebbe essere in grado di recuperare dal file di configurazione utilizzando qualcosa come:

    YourConfigElement config = 
        ConfigurationManager.GetSection("YourSectionName") as YourConfigElement ;

    Una volta che avete il vostro elemento di configurazione, è possibile fare ciò che ti piace – è possibile implementare tutte quelle cose che hai chiesto per verificare l’esistenza di un elemento, di ottenere un elemento specifico, etc.

    Si dovrebbe anche controllare Jon Rista serie in tre parti sul .NET 2.0 configurazione su CodeProject per ulteriori informazioni – forse questi articoli vi aiuterà a sbloccare il config “sfida” 😉

    Altamente raccomandato, ben scritto e molto utile!

    E se non si è scoperto che già c’è un ottimo La Sezione Di Configurazione Designer su Codeplex che rende visivamente la progettazione di sezioni di configurazione e raccolte in un batter d’occhio e scrive tutti i appiccicosa colla codice per voi – molto utile davvero!!!

    Marc

    • Grazie per la risposta. La parte più difficile per me è tipi di raccolta. Io ho risolto #1 ma a quanto pare ci dovrebbe essere una bella e veloce se siete in cerca di una chiave. Vado a controllare il tuo link.
    • In realtà io sono molto divertito. Le pagine che si suggeriscono sono di contenuto simile, ho visitato. Ormai sono esperto nella definizione di tipi di raccolta, l’aggiunta di elementi nel file di configurazione, tutti, ma in realtà utilizzando la collezione nel mio codice. Si espone il AsQueryable() metodo. Sono sicuro che è un indizio, ma il queryable a sua volta non esporre nulla di utilizzo – get o contiene, per esempio.

Lascia un commento