目录:

1、??运算符使用

2、GetEnumerator方法

3、ResourceManager.GetString方法获得Resources的字符。

4、获得Settings文件的字符。

一、??可能是一个被遗忘的运算符,很少看到有人用它,它的用法很简单却很实用:
variable ?? defaultValue
相当于
variable == null ? defaultValue : variable
有了它,一行便能搞定Lazy Evaluation了:
使用??之前:

public UserAccess Users
{
get
{
if (_users == null)
{
_users = Proxy.GetQueryObject<UserAccess>();
}
return _users;
}
}


之后:

public UserAccess Users
{
get
{
return _users ?? (_users = Proxy.GetQueryObject<UserAccess>());
}
}


注:这个运算符只支持引用类型和Nullable类型。

int?就是Nullable<int>,Nullable类型也支持的。

原文:http://www.cnblogs.com/Dah/archive/2007/09/29/910479.html

 

二.GetEnumerator

下面的示例说明 GetEnumerator 方法的用法。包括在枚举数为活动的情况下从基础 DataTable 中删除行时枚举数的行为。

view plaincopy to clipboardprint?
public static void Main() 

 try 
 
 DataTable userTable = new DataTable("peopleTable"); 
 
 userTable.Columns.Add("Id", typeof(int)); 
 userTable.Columns.Add("Name", typeof(string)); 
 
 // Note that even if you create the DataTableReader 
 // before adding the rows, the enumerator can still 
 // visit all the rows. 
 DataTableReader reader = userTable.CreateDataReader(); 
 userTable.Rows.Add(new object[] { 1, "Peter" }); 
 userTable.Rows.Add(new object[] { 2, "Mary" }); 
 userTable.Rows.Add(new object[] { 3, "Andy" }); 
 userTable.Rows.Add(new object[] { 4, "Russ" }); 
 
 IEnumerator enumerator = reader.GetEnumerator(); 
 // Keep track of whether the row to be deleted 
 // has actually been deleted yet. This allows 
 // this sample to demonstrate that the enumerator 
 // is able to survive row deletion. 
 bool isRowDeleted = false; 
 while (enumerator.MoveNext()) 
 
 DbDataRecord dataRecord = (DbDataRecord)enumerator.Current; 
 
 // While the enumerator is active, delete a row. 
 // This doesn't affect the behavior of the enumerator. 
 if (!isRowDeleted) 
 
 isRowDeleted = true; 
 userTable.Rows[2].Delete(); 
 } 
 Console.WriteLine(dataRecord.GetString(1)); 
 } 
 } 
 catch (Exception ex) 
 
 Console.WriteLine(ex); 
 } 
 Console.ReadLine();  

原文:http://www.cnblogs.com/suiqirui19872005/archive/2007/08/11/851752.html

2.2第二种用法

    const int times =1000;
 
    public static void Test2()
    
      Stopwatch watch = new Stopwatch();
      Hashtable hastable = new Hashtable();
       
        for (int i = 0; i < 10000; i++)
        {
            hastable.Add(i, i.ToString() + "值");
        }
        //测试GetEnumerator
        watch.Start();
        for (int i = 0; i < times; i++)
        {
            IDictionaryEnumerator enumerator = hastable.GetEnumerator();
            while (enumerator.MoveNext())
            {
                string key = enumerator.Key.ToString();
                string value = enumerator.Value.ToString();
            }
        }
        watch.Stop();
        Console.WriteLine("Hashtable GetEnumerator耗时" + watch.ElapsedMilliseconds);
        Console.WriteLine("---------------");
 
        watch.Reset();
        //测试ForEach
        watch.Start();
        for (int i = 0; i < times; i++)
        {
            foreach (object item in hastable.Keys)
            {
                string key = item.ToString();
                string value = hastable[item].ToString();
            }
        }
        watch.Stop();
        Console.WriteLine("Hashtable ForEach耗时" + watch.ElapsedMilliseconds);
        Console.WriteLine("---------------");
 
        watch.Reset();
        Dictionary<int, string> dictionary = new Dictionary<int, string>();
        for (int i = 0; i < 10000; i++)
        {
            dictionary.Add(i, i.ToString() + "值");
        }
        watch.Start();
        for (int i = 0; i < times; i++)
        {               
            Dictionary<int,string>.Enumerator enumerator = dictionary.GetEnumerator();
            while (enumerator.MoveNext())
            {
                int key = enumerator.Current.Key;
                string value = enumerator.Current.Value;
            }
        }
        watch.Stop();
        Console.WriteLine("Dictionary GetEnumerator耗时" + watch.ElapsedMilliseconds);
        Console.WriteLine("---------------");
 
        watch.Reset();
        //测试ForEach
        watch.Start();
        for (int i = 0; i < times; i++)
        {
            foreach (int item in dictionary.Keys)
            {
                int key = item;
                string value = dictionary[item];
            }
        }
        watch.Stop();
        Console.WriteLine("Dictionary ForEach耗时" + watch.ElapsedMilliseconds);
        Console.WriteLine("---------------");
        Console.ReadKey();
    }
}

  原文:http://www.cnblogs.com/scottckt/archive/2011/05/16/2048243.html

结论:

    1.HashTable大数据量插入数据时需要花费比Dictionary大的多的时间。

    2.for方式遍历HashTable和Dictionary速度最快。

    3.在foreach方式遍历时Dictionary遍历速度更快。

  在单线程的时候使用Dictionary更好一些,多线程的时候使用HashTable更好。

    因为HashTable可以通过Hashtable tab = Hashtable.Synchronized(new Hashtable());获得线程安全的对象。

  当然因为各自电脑的情况不一样,可能会有部分误差。如有问题,敬请斧正。

 

 三、获得Resources的字符。通过ResourceManager.GetString方法获得定义在Properties.Resources的String字符。WpfApplicationSomeMethodTest.Properties.Resources.ResourceManager.GetString("TestString");


四、获得Settings文件的字符。WpfApplicationSomeMethodTest.Properties.Settings.Default.DefaultFolder;