C# .Net 学习积累《五》

一、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>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值