一、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#实现打开文件或文件夹及选中文件
打开文件夹:
1 |
System.Diagnostics.Process.Start(FilePath); |
打开文件夹中某个文件:
1 |
System.Diagnostics.Process.Start(FilePath+ "/" +FileName); |
打开文件夹并选中单个文件:
1 |
System.Diagnostics.Process.Start( "Explorer" , "/select," + FilePath+ "\\" +FileName); |
或
1 |
System.Diagnostics.Process.Start( "Explorer.exe" , "/select," + FilePath+ "\\" +FileName); |
用IE打开文件:
1 |
System.Diagnostics.Process.Start( "Explorer" ,FilePath+ "\\" +FileName); |
或
1 |
System.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>