安徽新华电脑专修学院_安徽电脑培训_安徽电脑培训学校_合肥电脑培训

當(dāng)前位置:首頁 > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 程序開發(fā)教程 > C# Small Tips

C# Small Tips
2009-12-23 10:52:26  作者:cnblogs  來源:cnblogs

學(xué)習(xí)和使用C#這么久,也有了些可以跟大家分享的經(jīng)驗(yàn)和教訓(xùn),這里分享下幾個(gè)關(guān)于C#開發(fā)的小技巧:

1. 輸出變量的名稱。

    需求:有時(shí)候我們?cè)跍y(cè)試或平時(shí)練習(xí)的時(shí)候可能想把變量的值和它自身的名稱一起輸入到屏幕或者其他地方,而不是自己在代碼中寫變量名。如:

    var A = 10;

    Console.WriteLine("Var Name:A,Value:{0}", A);

    實(shí)現(xiàn):實(shí)現(xiàn)這個(gè)功能有兩種方式。讀者不妨也思考一下有沒有其他更好的方式實(shí)現(xiàn)這個(gè)功能。

        a. 我首先給出通過匿名類型和反射的實(shí)現(xiàn)方式。

    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");
        }
     }

    
//調(diào)用方式,我們通過匿名類型構(gòu)造對(duì)象,然后通過反射獲取它內(nèi)部屬性
     static void main()
     {
            
string testVar1 = "testName";
            Console.WriteLine(
new { testVar1 }.GetVariableName());

            
int testVar2 = 12345;
            Console.WriteLine(
new { testVar2 }.GetVariableName());
     }


 

    b. 通過.NET 3 中的Lamda表達(dá)式這里給出另外一個(gè)更加方便的實(shí)現(xiàn)方式。

  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. 字符串轉(zhuǎn)換為基本類型

    需求:在日常編程中,我們經(jīng)常要在文件或用戶輸入界面中將一些字符串變量轉(zhuǎn)換為常用類型,當(dāng)然我們可以用System.Convert類來完成這項(xiàng)工作,但如果有大量轉(zhuǎn)換工作進(jìn)行的時(shí)候,這種代碼看起來很不方便,這時(shí)候我們可以通過.net的一些新的特性來很方便的完成這項(xiàng)工作

    實(shí)現(xiàn):通過擴(kuò)展方法,反射和泛型可以很方便完成這項(xiàng)工作。

    public static class ObjectExtensions
    {
        
static T? To<T>(this string parse)
            
where T : struct
        {
            Type t 
= typeof(T);
            
if (t == typeof(int))
            {
                
int i;
                
if (int.TryParse(parse, out i))
                    
return (T)(object)i;
                
return null;
            }
            
if (t == typeof(double))
            {
                
double i;
                
if (double.TryParse(parse, out i))
                    
return (T)(object)i;
                
return null;
            }
            
//添加其他類型的轉(zhuǎn)換代碼,如DateTime,Enum,etc;
            throw new NotSupportedException(string.Format("類型:{0}轉(zhuǎn)換不支持",t.Name));
        }
     }
     
//使用函數(shù)
     static void main()
     {
       
int? a="111".To<int>();
        
double? b="111.111".To<double>();
        
int? c="bad".To<int>();
     }


 

不過這個(gè)轉(zhuǎn)換代碼中由于有兩個(gè)類型轉(zhuǎn)換才能通過編譯,所以看起來仍然沒那么舒服,希望大家能有更好的方式實(shí)現(xiàn)。

 

3. WinForm編程中線程安全調(diào)用組件。

    需求:在.net 1.0的時(shí)候在其他線程中操作Win Form 主線程組件時(shí)候是可以直接操作的,但這也帶來了潛在的風(fēng)險(xiǎn)。于是在2.0以后跨線程操作你需要通過BeginInvoke來完成該項(xiàng)操作,但這也讓代碼看起來很拖沓,有時(shí)用戶可能僅僅只需要在線程某項(xiàng)操作完成后僅僅更新窗口中的某個(gè)組件,如進(jìn)度條而已,卻需要另外寫一個(gè)函數(shù)去實(shí)現(xiàn)。

    實(shí)現(xiàn): 拖過擴(kuò)展函數(shù)和匿名方法可以很方便的完成窗口線程和其他線程之間的交互工作。下面給出了一個(gè)簡(jiǎn)單的實(shí)現(xiàn),當(dāng)然,如果你需要更安全的調(diào)用,還需要添加一些檢測(cè),如IsHandleCreated檢測(cè),另外如果你需要傳遞參數(shù),你可能需要另外定義一個(gè)委托.

    public static class ControlExtention
    {
        
public delegate void InvokeHandler();

        
public static void SafeInvoke(this Control control, InvokeHandler handler)
        {
            
if (control.InvokeRequired)
            {
                control.Invoke(handler);
            }
            
else
            {
                handler();
            }
        }
    }

   
//在form中當(dāng)用戶在非form線程中需要操作form中組件對(duì)象時(shí),調(diào)用如下
    public form:Form
    {
     
public form()
      {
        Thread t
=new  Thread(t1);
        t.start();
      }
     
void t1()
      {
            Thread.Sleep(
1000);
            
this.SafeInvoke(() => this.textBox1.Text = "Hello world");
      }
    }


 

上面只是平時(shí)碰到或者從別人那里學(xué)到的一些小的編程技巧,希望能對(duì)其他人也有所幫助。有機(jī)會(huì)的話希望能把我更多的自認(rèn)為好的總結(jié)發(fā)出來。
 


安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 长春网站优化,网络推广,seo快速排名,1.8元/词/天-同信长春网络公司 | 皮带输送机(输送机械)-带式输送机-皮带输送机生产厂家-河南坤威机械 | 环链电动葫芦_钢丝绳电动葫芦_电动葫芦厂家_上海沪工起重机械有限公司 | 宁波雷豹机电科技有限公司|雷豹冷风机|雷豹工业大风扇|MFC18000|MFC16000|MFC6000|EF3622|EF4222|EF4822|移动工业蒸发式冷风机空气冷却器|大型工业空调扇|雷豹移动式工业大风扇|雷豹大风扇|生产厂家|公司官网 | 切割片-砂轮片-抛光片-磨片-方格片-百叶片生产厂家定制加工-达蒙砂轮价格优惠 | 通信系统-通信人在线| 耐磨工业软管,PTFE耐腐蚀软管,耐磨喷砂胶管,超耐磨软管厂家,漯河利通液压管利通科技-耐磨工业软管,PTFE耐腐蚀软管,耐磨喷砂胶管,超耐磨软管厂家,漯河利通液压管利通科技 | 南通惠德彩钢有限公司-彩钢瓦,岩棉板,净化板,夹芯板,市政工地围挡板 | 济宁市天众机械有限公司_机械加工,电力产品,冶金产品,造纸机械 | 育婴师_催乳师证_月嫂证怎么考_育婴师证报考需要什么条件-家政培训网 | 中国C919飞机橡胶接头供应商-上海淞江减震器集团有限公司官方网站 | 停车场设计|地下停车场规划设计|智能停车位地下车库设计施工装修|深圳创安顺停车库规划设计有限公司 | 沈阳东鹰实业有限公司【官网】-聚氨酯清扫器-胶带输送机保护装置 | 宁波管道安装_宁波工业冷风机_宁波冷风机厂家_宁波厂房通风降温_「浙江甬风机电」 | 球场地板_运动场地面_体育设施器材_地坪漆工程_项目承接-大上实业(深圳)有限公司 | 网带式等温正火生产线_燃气式铝合金加热炉_燃气式烘干窑炉-湖州中科炉业科技有限公司 | 浙江中瓷阀门有限公司 | 久久91精品久久91综合_国产亚洲自拍一区_国产精品第1页_亚洲高清视频一区_91成人午夜在线精品_亚洲国产精品网站在线播放_亚洲国产成人久久综合区_国产精品亚洲专区在线观看_免费视频精品一区二区三区 | 贴膜机厂家|高精度|手机贴膜机|全自动|半自动|无边覆膜机-深圳荷花自动化 | 无尘布_乳胶手套_防静电手环_口罩-苏州迈思德超净科技有限公司 | 泊头压滤机-隔膜-洗沙-厢式-板框压滤机-河北巨盛压滤机制造有限公司 | 全开式真空干燥机_全开耙式真空干燥机_全开式动态真空干燥机,江阴千峰机械制造有限公司 | 济南塑料袋,食品包装袋,复合塑料袋,方便袋-济南精美塑料包装厂 | 一次性妇科用品_一次性医疗用品_一次性口腔器械盒_天津市双利医疗器械有限责任公司 | 中山电子控制板|中山工业控制板|中山市云禾电子科技有限公司 | 碳化硅脱硫喷嘴,碳化硅烧嘴套,碳化硅耐磨衬套-潍坊致达特种陶瓷有限公司 | 上海中医医院_上海名老中医专家门诊_上海徐浦中医医院 | 天津止回阀-止回阀报价/哪家好-天津蝶阀/进口阀门/通风蝶阀批发-闸阀阀门/球阀生产厂家-天津凯维斯阀门制造 | 模压机|硫化机|平板硫化机生产厂家-南通海利特橡塑机械有限公司 模压化粪池_三格式化粪池_玻璃钢化粪池厂家 | 正拓夏令营官网-中小学生军事夏令营-研学军旅训练拓展夏令营 | 箱包定制_广州箱包厂_双肩电脑背包_双肩旅行包_拉杆箱包_商务公文包_包包批发,深圳爱自由,礼品箱包定制,电话:400-0061-690 | 陕西筱润智能科技有限公司 干部人事智能档案柜 智能密集架 智能档案柜 部队选层文件智能柜 智能枪弹柜 财务智能档案柜 边防武警智能密集架 医院智能档案柜 部队选层文件智能柜智能枪弹柜 学校医院文件柜 企事业单位公检法智能文件柜 生产厂家-筱润智能科技有限公司 RFID射频智能密集架 全自动智能选层档案柜 智能密保柜 枪柜部队营房营具床桌椅办公家具 办公用品档案盒设备货架 全自动智能选层柜生产厂家-筱润智能科技有限公司 | 华网,华网资讯,华网头条,华人网络家园 | 上海专升本-上海统招专升本网 | 筱晓(上海)光子技术有限公司官网,MCT探测器,半导体激光二极管,中红外QCL激光器,光纤放大器,光电探测器 | 上海安防网-上海安全防范报警协会 | 郑州试驾场地_双超专业汽车试驾场地_郑州双超文化传播有限公司官方网站 | 久久91精品久久91综合_国产亚洲自拍一区_国产精品第1页_亚洲高清视频一区_91成人午夜在线精品_亚洲国产精品网站在线播放_亚洲国产成人久久综合区_国产精品亚洲专区在线观看_免费视频精品一区二区三区 | 磨刀机厂家,全自动磨刀机-山东威海富田磨具 | 上海画册设计-上海宣传册设计-产品手册设计-企业画册设计公司 | 曙海培训-仿真培训Linux培训html5培单片机培训PCB培训python培训PLC培训C语言培训android培训物联网培训无线电培训欧姆龙培训工业机器人培训5G培训Hadoop培训CFD培训项目外包开发咨询 |