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

/// <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 < )
throw new Exception("返回的字符串长度必须大于[0] ");
if (oldStr.Length > maxLength)
{
string strTmp = oldStr.Substring(, maxLength);
if (string.IsNullOrEmpty(endWith))
return strTmp;
else
return strTmp + endWith;
}
return oldStr;
}

调用:

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

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

二、过滤SQL非法字符串

/// <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地址:

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

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

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

调用:

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

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

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

System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
timer.Start();
Decimal total = ;
int limit = ;
for (int i = ; i < limit; ++i)
{
total = total + (Decimal)Math.Sqrt(i);
}
timer.Stop();
Console.WriteLine(“Sum of sqrts: {}”,total);
Console.WriteLine(“Elapsed milliseconds: {}”,
timer.ElapsedMilliseconds);
Console.WriteLine(“Elapsed time: {}”, timer.Elapsed); 现在已经有专门的工具来检测程序的运行时间,可以细化到每个方法,比如dotNetPerformance软件。 以上面的代码为例子,您需要直接修改源代码,如果是用来测试程序,则有些不方便。请参考下面的例子。 class AutoStopwatch : System.Diagnostics.Stopwatch, IDisposable
{
public AutoStopwatch()
{
Start(); //base.Start();
}
public void Dispose()
{
Stop();//base.Stop();
Console.WriteLine(“Elapsed: {}”, this.Elapsed);
}
}
借助于using语法,像下面的代码所示,可以检查一段代码的运行时间,并打印在控制台上。 using (new AutoStopwatch())
{
Decimal total2 = ;
int limit2 = ;
for (int i = ; i < limit2; ++i)
{
total2 = total2 + (Decimal)Math.Sqrt(i);
}
}

七、使用等待光标

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

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();
}
如代码所示,即使抛出异常,光标也可以恢复到之间的状态。

.NET常用操作小知识的更多相关文章

  1. javascript常用的小知识

    1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键 <table border oncontextmenu ...

  2. 编程小白入门分享二:IntelliJ IDEA的入门操作小知识

    idea简介 IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境.IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支 ...

  3. 常用JS小知识汇总

    1 上传图片:html代码 <input id="image" type='file' name='myFile' size='15' onchange="show ...

  4. Kivy之常用的小知识

    1.设置标题 app.title = '测试' 2.设置屏幕长度 Window.size=1000,600 3.设置屏幕右上角icon app.title = r'C:\Users\Administr ...

  5. MySQL不常用、易忽略的小知识

    笔者从事开发也有一段时间了,关于数据库方面的一些小知识在这里总结一下 1.count(*),count(1)与count(column)区别 count(*)对行的数目进行计算,包含NULL coun ...

  6. s性能优化方面的小知识

    总结的js性能优化方面的小知识 前言 一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够 ...

  7. ArcGIS中的坐标系:基本概念和常用操作(一)

    本文呢是主要是借鉴李郎平李大大的博士论文和百度百科,里面还有一点点我自己的理解,希望能帮助自己加深对于坐标系的认识. 李大大的博客:http://blog.sciencenet.cn/u/Brume ...

  8. 常用 JavaScript 小技巧及原理详解

    善于利用JS中的小知识的利用,可以很简洁的编写代码 1. 使用!!模拟Boolean()函数 原理:逻辑非操作一个数据对象时,会先将数据对象转换为布尔值,然后取反,两个!!重复取反,就实现了转换为布尔 ...

  9. DevExpress之GridControl控件小知识

    DevExpress之GridControl控件小知识 一.当代码中的DataTable中有建数据关系时,DevExpress 的 GridControl 会自动增加一个子视图 .列名也就是子表的字段 ...

随机推荐

  1. uva 11292 Dragon of Loowater (勇者斗恶龙)

    Problem C: The Dragon of Loowater Once upon a time, in the Kingdom of Loowater, a minor nuisance tur ...

  2. 在Vim里使用gtags-cscope

    用Vundle安装好gtags-cscope后,要在vimrc里添加如下设置: " cscopeset cscopetag                  " 使用 cscope ...

  3. 摄像头(4)用Camera和SurfaceView自定义拍照程序

    定制拍照程序的基本步骤 1,打开照相机:Camera.open 这是独占方式打开的 2,创建SurfaceView对象 多缓冲,多线程view 3,添加回调事件监听器(SurfaceHolder.ad ...

  4. 【HDOJ】4348 To the moon

    主席树区间更新,延迟标记. /* 4348 */ #include <iostream> #include <sstream> #include <string> ...

  5. Spring-Data-JPA学习

    Spring-Data-JPA结构图 网址: http://blog.sina.com.cn/s/blog_667ac0360102ecsf.html

  6. php 连接字符串. ZEND_ASSIGN_CONCAT/ZEND_CONCAT原理

    0.php代码 <?php $a='abc'; $b='def'; $c='ghi';$d='jkl'; $a.=$b.$c.$d; 1.BNF范式(语法规则) expr_without_var ...

  7. [原]Unity3D深入浅出 - Shader基础开发

    概述 简单来讲,shader是为渲染管线中的特定处理截断提供算法的一段代码.Shader是伴随着可编程渲染管线出现的,开发者可使用Shader对渲染过程加以控制,拥有更大的创作控件,因此Shader的 ...

  8. bzoj1196:[Hnoi2010]chorus 合唱队

    这数据范围明显的区间dp啊...然而据说二维会wa...那就写三维把... #include<cstdio> #include<cstring> #include<cct ...

  9. 【转】【iOS】导航栏那些事儿

    原文网址:http://www.jianshu.com/p/f797793d683f 参考文章 navigationItem UINavigationItem UINavigationBar UIBa ...

  10. JDBC 与ODBC的区别

    一.ODBC(Open   DataBase   Connectivity   :  开放数据库连接)         ODBC  总体结构  应用程序    执行处理并调用odbc函数,提交sql语 ...