본문 바로가기
  • 읽고보고쓰고
PROGRAMMING/C#

NameValueCollection 사용하기

by 체리그루브 2012. 2. 23.
728x90

배경

소스코드를 분석하다가 NameValueCollection 이란 객체를 발견했다.

뭐하는 놈인고, MSDN을 봤더니, 설명을 봐도 모르겠더만, 예제 코드를 보니 이해가 쉽게 와닿았다.

Hashtable 처럼 데이터를 key와 code를 모두 string으로 받아 보관하는 Collection이다. 물론 대소문자 구별 안하고, key나 index로도 꺼내쓸 수 있다.

 

소스 

using System;
using System.Collections;
using System.Collections.Specialized;

public class SamplesNameValueCollection  {

   public static void Main()  {

      // Creates and initializes a new NameValueCollection.
      NameValueCollection myCol = new NameValueCollection();
      myCol.Add( "red", "rojo" );
      myCol.Add( "green", "verde" );
      myCol.Add( "blue", "azul" );
      myCol.Add( "red", "rouge" );

      // Displays the values in the NameValueCollection in two different ways.
      Console.WriteLine( "Displays the elements using the AllKeys property and the Item (indexer) property:" );
      PrintKeysAndValues( myCol );
      Console.WriteLine( "Displays the elements using GetKey and Get:" );
      PrintKeysAndValues2( myCol );

      // Gets a value either by index or by key.
      Console.WriteLine( "Index 1 contains the value {0}.", myCol[1] );
      Console.WriteLine( "Key \"red\" has the value {0}.", myCol["red"] );
      Console.WriteLine();

      // Copies the values to a string array and displays the string array.
      String[] myStrArr = new String[myCol.Count];
      myCol.CopyTo( myStrArr, 0 );
      Console.WriteLine( "The string array contains:" );
      foreach ( String s in myStrArr )
         Console.WriteLine( "   {0}", s );
      Console.WriteLine();

      // Searches for a key and deletes it.
      myCol.Remove( "green" );
      Console.WriteLine( "The collection contains the following elements after removing \"green\":" );
      PrintKeysAndValues( myCol );

      // Clears the entire collection.
      myCol.Clear();
      Console.WriteLine( "The collection contains the following elements after it is cleared:" );
      PrintKeysAndValues( myCol );

   }

   public static void PrintKeysAndValues( NameValueCollection myCol )  {
      Console.WriteLine( "   KEY        VALUE" );
      foreach ( String s in myCol.AllKeys )
         Console.WriteLine( "   {0,-10} {1}", s, myCol[s] );
      Console.WriteLine();
   }

   public static void PrintKeysAndValues2( NameValueCollection myCol )  {
      Console.WriteLine( "   [INDEX] KEY        VALUE" );
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]     {1,-10} {2}", i, myCol.GetKey(i), myCol.Get(i) );
      Console.WriteLine();
   }

}

 

결과

위의 소스 코드와 비교하며 검토하면 어렵지 않게 해석이 가능하다.^^

 /*

This code produces the following output.

Displays the elements using the AllKeys property and the Item (indexer) property:
   KEY        VALUE
   red        rojo,rouge
   green      verde
   blue       azul

Displays the elements using GetKey and Get:
   [INDEX] KEY        VALUE
   [0]     red        rojo,rouge
   [1]     green      verde
   [2]     blue       azul

Index 1 contains the value verde.
Key "red" has the value rojo,rouge.

The string array contains:
   rojo,rouge
   verde
   azul

The collection contains the following elements after removing "green":
   KEY        VALUE
   red        rojo,rouge
   blue       azul

The collection contains the following elements after it is cleared:
   KEY        VALUE


*/

 

참고로 우리 제품에서 사용되는 본 객체의 쓰임을 잠시 나누자면 아래와 같다.

 using System.Collections.Specialized;

 public class ClassConfiguration : IConfiguration
 {
  private NameValueCollection properties;
  
  public ClassConfiguration()
  {
   properties = new NameValueCollection();
  }
  public string GetPropertyValue(string name)
  {
   return properties[name];
  }
  public string[] PropertyNames
  {
   get
   {
    return properties.AllKeys;
   }
  }
  
  public void Fill(XmlNode node)
  {
   try
   {
    properties.Clear();
    foreach (XmlNode param in node.SelectNodes("param"))
    {
     properties.Add(param.Attributes["name"].Value, param.Attributes["value"].Value);
    }
   }
   catch (Exception)
   {
   }
  }
 }

728x90

'PROGRAMMING > C#' 카테고리의 다른 글

JSON 활용 C#  (0) 2012.04.25
색상 주기 코드 C#  (0) 2012.02.23
CS CustomControl Part2  (0) 2012.02.22
CS CustomControl Part1  (0) 2012.02.22
Delegate & Event  (0) 2012.02.22

댓글