C# .Net 学习积累《五》

来源:互联网 发布:沈阳seo 公司 编辑:程序博客网 时间:2024/05/21 22:41

一、C# 中 String 和 Stringbuilder 的区别

       String 对象是不可改变的。每次使用 System.String 类中的方法之一或进行运算时(如赋值、拼接等)时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。而 StringBuilder 则不会。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

二、 C# 获取小数位方法

1.System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo(); provider.NumberDecimalDigits =intDecLength; //要设定的小数位数 double strCashAmt=Convert.ToDouble(this.txtCashAmt.Text); //先把控件內的值转成double this.txtCashAmt.Text = strCashAmt.ToString("N",provider); //再利用ToString函数格式化小数位数 2.保留N位,四舍五入 . decimal d= decimal.Round(decimal.Parse("0.55555"),2); 3.保留N位四舍五入 Math.Round(0.55555,2) 4,保留N位四舍五入 double dbdata = 0.55555; string str1 = dbdata.ToString("f2");//fN 保留N位,四舍五入 5.保留N位四舍五入 string result = String.Format("{0:N2}", 0.55555);//2位 string result = String.Format("{0:N3}", 0.55555);//3位 6. 保留N位四舍五入 (不错) double s=0.55555; result=s.ToString("#0.00");//点后面几个0就保留几位 C#下如果显示保留小数位数,及百分号的解决方法: 1、用NumberFormatInfo类来解决: System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo(); provider.PercentDecimalDigits = 2;//小数点保留几位数. provider.PercentPositivePattern = 2;//百分号出现在何处. double result = (double)1 / 3;//一定要用double类型. Response.Write(result.ToString("P", provider)); 2、用toString方法.: public string getRate(double hcount, double task) { string rValue; string temp = ""; if (task == 0) { task = 1; } double db = (hcount / task) * 100; if (hcount >= task) { rValue = "100%"; } else { rValue = db.ToString("#0.#0") + "%"; } return rValue; } string str1 = String.Format("{0:N1}",56789); //result: 56,789.0 string str2 = String.Format("{0:N2}",56789); //result: 56,789.00 string str3 = String.Format("{0:N3}",56789); //result: 56,789.000 string str8 = String.Format("{0:F1}",56789); //result: 56789.0 string str9 = String.Format("{0:F2}",56789); //result: 56789.00 string str11 =(56789 / 100.0).ToString("#.##"); //result: 567.89 string str12 =(56789 / 100).ToString("#.##"); //result: 567 

参考出处: http://www.jb51.net/article/17010.htm
三、 C# 获取字符串 长度的方法参考:

在包含中文的字符串处理时,除了裁切固定长度的操作之外,有时也需要获取一个字符串的实际字符数,比如我们限制输入框字符数的时候。而C#提供的string.Length属性却无法满足我们的要求,由此,便有了下面这个方法:/// <summary>/// 获取字符串长度。与string.Length不同的是,该方法将中文作 2 个字符计算。/// </summary>/// <param name="str">目标字符串</param>/// <returns></returns>public static int GetLength(string str){    if (str == null || str.Length == 0) { return 0; }    int l = str.Length;    int realLen = l;    #region 计算长度    int clen = 0;//当前长度    while (clen < l)    {        //每遇到一个中文,则将实际长度加一。        if ((int)str[clen] > 128) { realLen++; }        clen++;    }    #endregion    return realLen;}在写上面那个方法时,我突然想到,如果把字符串转换成byte[]是不是也能获取到这个长度呢?姑且试试:public static int GetLength_Obsoleted(string str){    if (str == null || str.Length == 0) { return 0; }    byte[] data = Encoding.Default.GetBytes(str);    return data.Length;}

这个方法也能够让我们如愿取到字符串长度。但这两个方法孰优孰劣呢?我使用了一句110字符长度的中文进行500万次调用测试,事实说话:GetLength 的执行效率几乎是 GetLength_Obsoleted 的 4 倍!

原文地址:
http://www.cnblogs.com/uonun/articles/1698978.html

四、C#实现打开文件或文件夹及选中文件

打开文件夹:

1System.Diagnostics.Process.Start(FilePath);

打开文件夹中某个文件:

1System.Diagnostics.Process.Start(FilePath+"/"+FileName);

 

打开文件夹并选中单个文件:

1System.Diagnostics.Process.Start("Explorer""/select,"+ FilePath+"\\"+FileName);

1System.Diagnostics.Process.Start("Explorer.exe""/select,"+ FilePath+"\\"+FileName);

用IE打开文件:

1System.Diagnostics.Process.Start("Explorer",FilePath+"\\"+FileName);

1System.Diagnostics.Process.Start("Explorer.exe",FilePath+"\\"+FileName);

注:(explorer,explorer.exe,select,不区分大小写,”/selecet,”其中”/,”都不能少,FilePath为文件路径不包含文件名)

扩展提示:可以采用 Application.StartupPath 获得应用程序所在的目录。

五、 C#中实现文本框只能输入数字

文本框的keypress事件:在你所要输入的文本框(比如txtNum)的KeyPress事件编写如下代码:                     private   void   txtNum_KeyPress(object   sender,   KeyPressEventArgs   e)                     {                             if (!char.IsNumber(e.KeyChar) && e.KeyChar!=(char)Keys.Back)                           {                                     e.Handled   =   true;                             }                     }用方法实现:   在TextChanged事件中^[0-9]{1,}$   正则表达式   Regex   r   =   new   Regex("^[0-9]{1,}$");   if(!r.IsMatch(textBox1.Text))   {         Messagebox.Show("请输入数字");   }文本框onkeydown事件: txt1.Attributes.Add("onkeydown",   "if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105))   &&   (event.keyCode!=8)   &&  (event.keyCode!=9)   &&   (event.keyCode!=13)   &&   (event.keyCode!=46)){alert('请输入数字');return   false;}");文本框KeyPress事件:private   void   txtNumber_KeyPress(object   sender,   System.Windows.Forms.KeyPressEventArgs   e)   {   if   (e.KeyChar   >=   '0'   &&   e.KeyChar   <=   '9')     {   e.Handled   =   false;   return;   }   e.Handled   =   true;   }利用正则表达式限制:利用正则表达式限制网页表单里的文本框输入内容:     用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"   onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"     1.用正则表达式限制只能输入全角字符:   onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')"   onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"     2.用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'')   "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"  3.用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'')   "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"     文本框金额输入:    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txtAmount" Display="None" ErrorMessage="收款金额只能是数字,最多4位小数" ValidationExpression="^[0-9]+(\.[0-9]{0,4})?$"></asp:RegularExpressionValidator>



原创粉丝点击