學習和使用C#這麼久,也有了些可以跟大家分享的經驗和教訓,這裡分享下幾個關於C#開發的小技巧:
1. 輸出變量的名稱。
需求:有時候我們在測試或平時練習的時候可能想把變量的值和它自身的名稱一起輸入到屏幕或者其他地方,而不是自己在代碼中寫變量名。如:
var A = 10;
Console.WriteLine("Var Name:A,Value:{0}", A);
實現:實現這個功能有兩種方式。讀者不妨也思考一下有沒有其他更好的方式實現這個功能。
a. 我首先給出通過匿名類型和反射的實現方式。
public static class ObjectExtensions
{
public static string GetVariableName<T>(this T obj)
{
System.Reflection.PropertyInfo[] objGetTypeGetProperties = obj.GetType().GetProperties();
if (objGetTypeGetProperties.Length == 1)
return objGetTypeGetProperties[0].Name;
else
throw new ArgumentException("object must contain one property");
}
}
//調用方式,我們通過匿名類型構造對象,然後通過反射獲取它內部屬性
static void main()
{
string testVar1 = "testName";
Console.WriteLine(new { testVar1 }.GetVariableName());
int testVar2 = 12345;
Console.WriteLine(new { testVar2 }.GetVariableName());
}
b. 通過.NET 3 中的Lamda表達式這裡給出另外一個更加方便的實現方式。
static void WriteName<T>(Expression<Func<T>> expression)
{
Console.WriteLine("{0}={1}",
((MemberExpression)expression.Body).Member.Name,
expression.Compile()());
}
static void main()
{
string testVar1 = "testName";
WriteName(() => testVar1);
}
2. 字符串轉換為基本類型
需求:在日常編程中,我們經常要在文件或用戶輸入界面中將一些字符串變量轉換為常用類型,當然我們可以用System.Convert類來完成這項工作,但如果有大量轉換工作進行的時候,這種代碼看起來很不方便,這時候我們可以通過.net的一些新的特性來很方便的完成這項工作
實現:通過擴展方法,反射和泛型可以很方便完成這項工作。
&nb