一、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;
}
利用正则表达式限制:
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:οnkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/
[^\u4E00-\u9FA5]/g,''))"
1.用正则表达式限制只能输入全角字符: οnkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData
('text').replace(/[^\uFF00-\uFFFF]/g,''))"
2.用正则表达式限制只能输入数字:οnkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
3.用正则表达式限制只能输入数字和英文:οnkeyup="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>