目录:
1、??运算符使用
2、GetEnumerator方法
3、ResourceManager.GetString方法获得Resources的字符。
4、获得Settings文件的字符。
一、??可能是一个被遗忘的运算符,很少看到有人用它,它的用法很简单却很实用:
variable ?? defaultValue
相当于
variable == null ? defaultValue : variable
有了它,一行便能搞定Lazy Evaluation了:
使用??之前:
{
get
{
if (_users == null)
{
_users = Proxy.GetQueryObject<UserAccess>();
}
return _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;