前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET常用操作小知识

.NET常用操作小知识

作者头像
跟着阿笨一起玩NET
发布2018-09-19 16:00:38
4250
发布2018-09-19 16:00:38
举报

一、.NET截取指定长度汉字超出部分以“.....”表示

代码语言:javascript
复制
/// <summary> 
/// 将指定字符串按指定长度进行剪切, 
/// </summary> 
/// <param name= "oldStr "> 需要截断的字符串 </param> 
/// <param name= "maxLength "> 字符串的最大长度 </param> 
/// <param name= "endWith "> 超过长度的后缀 </param> 
/// <returns> 如果超过长度,返回截断后的新字符串加上后缀,否则,返回原字符串 </returns> 
public static string StringTruncat(string oldStr, int maxLength, string endWith) 
{ 
if (string.IsNullOrEmpty(oldStr)) 
// throw new NullReferenceException( "原字符串不能为空 "); 
return oldStr + endWith; 
if (maxLength < 1) 
throw new Exception("返回的字符串长度必须大于[0] "); 
if (oldStr.Length > maxLength) 
{ 
string strTmp = oldStr.Substring(0, maxLength); 
if (string.IsNullOrEmpty(endWith)) 
return strTmp; 
else 
return strTmp + endWith; 
} 
return oldStr; 
}

调用:

 var v = StringTruncat("广东省深圳市西乡镇宝安区", 10, "...");

显示:广东省深圳市西乡镇宝...

二、过滤SQL非法字符串

代码语言:javascript
复制
/// <summary> 
/// 过滤SQL非法字符串 
/// </summary> 
/// <param name="value"></param> 
/// <returns></returns> 
public static string Filter(string value) 
{ 
if (string.IsNullOrEmpty(value)) 
return string.Empty; 
value = Regex.Replace(value, @";", string.Empty); 
value = Regex.Replace(value, @"'", string.Empty); 
value = Regex.Replace(value, @"&", string.Empty); 
value = Regex.Replace(value, @"%20", string.Empty); 
value = Regex.Replace(value, @"--", string.Empty); 
value = Regex.Replace(value, @"==", string.Empty); 
value = Regex.Replace(value, @"<", string.Empty); 
value = Regex.Replace(value, @">", string.Empty); 
value = Regex.Replace(value, @"%", string.Empty); 
return value; 
}

三、穿过代理服务器取远程用户真实IP地址:

代码语言:javascript
复制
if(Request.ServerVariables["HTTP_VIA"]!=null)
{
  string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
else
{
  string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}

四、sql server中 len和datalength区别

select len('a好')  //返回为2 select datalength('a好')  //返回为3

五、截取指定字节长度的字符串扩展方法

代码语言:javascript
复制
public static class Extension
{
      /// <summary>
        /// 截取指定字节长度的字符串
        /// </summary>
        /// <param name="str">原字符串</param>
        /// <param name="len">截取字节长度</param>
        /// <returns></returns>
        public static string CutByteString(this string str, int len)
        {
            string result = string.Empty;// 最终返回的结果
            if (string.IsNullOrEmpty(str)) { return result; }
            int byteLen = System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度
            int charLen = str.Length;// 把字符平等对待时的字符串长度
            int byteCount = 0;// 记录读取进度
            int pos = 0;// 记录截取位置
            if (byteLen > len)
            {
                for (int i = 0; i < charLen; i++)
                {
                    if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2
                    { byteCount += 2; }
                    else// 按英文字符计算加1
                    { byteCount += 1; }
                    if (byteCount > len)// 超出时只记下上一个有效位置
                    {
                        pos = i;
                        break;
                    }
                    else if (byteCount == len)// 记下当前位置
                    {
                        pos = i + 1;
                        break;
                    }
                }
                if (pos >= 0)
                { result = str.Substring(0, pos); }
            }
            else
            { result = str; }
            return result;
        }


        /// <summary>
        /// 截取指定字节长度的字符串
        /// </summary>
        /// <param name="str">原字符串</param>
        /// <param name="startIndex">起始位置</param>
        /// <param name="len">截取字节长度</param>
        /// <returns></returns>
        public static string CutByteString(this string str, int startIndex, int len)
        {
            string result = string.Empty;// 最终返回的结果
            if (string.IsNullOrEmpty(str)) { return result; }

            int byteLen = System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度
            int charLen = str.Length;// 把字符平等对待时的字符串长度

            if (startIndex == 0)
            { return CutByteString(str, len); }
            else if (startIndex >= byteLen)
            { return result; }
            else //startIndex < byteLen
            {
                int AllLen = startIndex + len;
                int byteCountStart = 0;// 记录读取进度
                int byteCountEnd = 0;// 记录读取进度
                int startpos = 0;// 记录截取位置                
                int endpos = 0;// 记录截取位置
                for (int i = 0; i < charLen; i++)
                {
                    if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2
                    { byteCountStart += 2; }
                    else// 按英文字符计算加1
                    { byteCountStart += 1; }
                    if (byteCountStart > startIndex)// 超出时只记下上一个有效位置
                    {
                        startpos = i;
                        AllLen = startIndex + len - 1;
                        break;
                    }
                    else if (byteCountStart == startIndex)// 记下当前位置
                    {
                        startpos = i + 1;
                        break;
                    }
                }

                if (startIndex + len <= byteLen)//截取字符在总长以内
                {
                    for (int i = 0; i < charLen; i++)
                    {
                        if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2
                        { byteCountEnd += 2; }
                        else// 按英文字符计算加1
                        { byteCountEnd += 1; }
                        if (byteCountEnd > AllLen)// 超出时只记下上一个有效位置
                        {
                            endpos = i;
                            break;
                        }
                        else if (byteCountEnd == AllLen)// 记下当前位置
                        {
                            endpos = i + 1;
                            break;
                        }
                    }
                    endpos = endpos - startpos;
                }
                else if (startIndex + len > byteLen)//截取字符超出总长
                {
                    endpos = charLen - startpos;
                }
                if (endpos >= 0)
                { result = str.Substring(startpos, endpos); }
            }
            return result;
        }
}

调用:

代码语言:javascript
复制
//=》特殊处理 只读取20位长度的User数据
                if (System.Text.Encoding.Default.GetBytes(user).Length > 20)//Saitor
                {
                    user = user.CutByteString(20);
                }

六、使用记秒表检查程序运行时间

代码语言:javascript
复制
如果你担忧某些代码非常耗费时间,可以用StopWatch来检查这段代码消耗的时间,如下面的代码所示

System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
timer.Start();
Decimal total = 0;
int limit = 1000000;
for (int i = 0; i < limit; ++i)
{
      total = total + (Decimal)Math.Sqrt(i);
}
timer.Stop();
Console.WriteLine(“Sum of sqrts: {0}”,total);
Console.WriteLine(“Elapsed milliseconds: {0}”,
timer.ElapsedMilliseconds);
Console.WriteLine(“Elapsed time: {0}”, timer.Elapsed);
 
现在已经有专门的工具来检测程序的运行时间,可以细化到每个方法,比如dotNetPerformance软件。

以上面的代码为例子,您需要直接修改源代码,如果是用来测试程序,则有些不方便。请参考下面的例子。

class AutoStopwatch : System.Diagnostics.Stopwatch, IDisposable
{
   public AutoStopwatch()
   { 
       Start(); //base.Start();
   }
   public void Dispose()
   {
       Stop();//base.Stop();
       Console.WriteLine(“Elapsed: {0}”, this.Elapsed);
   }
}
借助于using语法,像下面的代码所示,可以检查一段代码的运行时间,并打印在控制台上。

using (new AutoStopwatch())
{
    Decimal total2 = 0;
    int limit2 = 1000000;
    for (int i = 0; i < limit2; ++i)
    {
       total2 = total2 + (Decimal)Math.Sqrt(i);
    }
}

七、使用等待光标

代码语言:javascript
复制
当程序正在后台运行保存或是册除操作时,应当将光标状态修改为忙碌。可使用下面的技巧。

class AutoWaitCursor : IDisposable
{
private Control _target;
private Cursor _prevCursor = Cursors.Default;
public AutoWaitCursor(Control control)
{
   if (control == null)
   {
     throw new ArgumentNullException(“control”);
   }
   _target = control;
   _prevCursor = _target.Cursor;
   _target.Cursor = Cursors.WaitCursor;
}
public void Dispose()
{
   _target.Cursor = _prevCursor;
}
}
 
用法如下所示,这个写法,是为了预料到程序可能会抛出异常

using (new AutoWaitCursor(this))
{
...
throw new Exception();
}
如代码所示,即使抛出异常,光标也可以恢复到之间的状态。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-10-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档