编程小问题和Tips(C#)

原创 2012年03月31日 06:07:34

C# 方面

1、关于C#参数传递的问题,除了int,long,string等是按值传递外,其他的一些类,结构体都默认是引用传递,相当于关键字ref,ref,out等关键字也主要用于按值传递的参数修饰

2、C#中的[Serializable] 序列化 Serializable这个标签是类可以被序列化的特性,表示这个类可以被序列化。什么叫序列化?我们都知道对象是暂时保存在内存中的,不能用U盘考走了,有时为了使用介质转移对象,并且把对象的状态保持下来,就需要把对象保存下来,这个过程就叫做序列化,通俗点,就是把人的魂(对象)收伏成一个石子(可传输的介质)什么叫反序列化?就是再把介质中的东西还原成对象,把石子还原成人的过程。在进行这些操作的时候都需要这个可以被序列化,要能被序列化,就得给类头加[Serializable]特性。通常网络程序为了传输安全才这么做。

3、string stringbuffer stringbuilder

        对于String类型,每次的操作都相当于new一个然后再进行append 等一系列操作,会对内存的影响非常大,但是速度较快

        对于StringBuffer类型,Java.lang.StringBuffer线程安全的可变字符序列速度较慢。类似于 String 的字符串缓冲区,但不能修改

        对于StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快,但是如果将 StringBuilder 的实例用于多个线程是不安全的。需要这样的同步,则建议使用 StringBuffer

        大部分情况下 StringBuilder>StringBuffer>String

4、字符串前加@ ""表示忽略字符串的转义字符\

5、创建DataRow得先创建DataTable后再创建

6、Ajax不是程序,无刷新状态将数据提交给后台,后台处理结果在浏览器做相应的处理,传数据前台html代码从一般处理程序的后台写前台.aspx文件完全可以实现

      .ashx的功能 .ashx性能高,免去了控件解析以及页面处理过程,适合于生成动态图片,生成动态文本之类,实现某一具体功能的操作,比较复杂的功能,处理回发控件的事件则不合适

7、.net 编译器编译成 IL语言代码(intermediate language) 交给.net vm 再转换成本地代码,与CPU寄存器打交道

8、ref C#输入相当于 C指针

9、各个项目连接通过解决方案 引用 C# 注意namespace的应用

10、asp:fileupload控件中,若上传文件大小为0,则hasfile为智能判断为false

11、<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

过时了,现在html5推荐的是
<!DOCTYPE html>
<html>

会造成一些图标位置问题

12、Thread was being aborted 在捕获异常的try块中使用response.redirect或者response.write();response.end();有时会提示线程已被终止("Threading was being aborted")错误;

分析该错误的原因是因为执行这两条命令会重新发送一次请求,将当前的请求abort掉;通俗讲就是当进程还想继续进行的时候,发现自己已经被调用过abort方法了,既然自己作为线

程已被终止,就无法继续执行了,于是抛出异常

解决方法有以下三种:

1、将这两个命令放到try/catch块外,不捕获异常就不会提示这个错误;

2、捕获异常时进行判断:

try
{}
catch(Exception e)
{
if(!(ex is System.Threading.ThreadAbortException))
{
//在这里显示错误
}
}

3、捕获进程终止错误不做处理

try
{}
catch (ThreadAbortException)
{ }
catch(Exception ex)
{
//显示错误
}
有网友说可以在Response.Write();加上Response.Clear();不知道这个方法是否可行;
13、Response.Clear();
       //优先取得代理IP
       string IP= Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
       if (string.IsNullOrEmpty(IP))
       {
         
//没有代理IP则直接取客户端IP
          IP= Request.ServerVariables["REMOTE_ADDR"];
       }

       Response.Write(IP);
Response.End();
但可以用request.Headers.Add("X_FORWARDED_FOR","0.0.0.0");伪造
严格说,HTTP HEADER 只能是ASCII编码,因为Client没有办法取得HEADER的编码信息(内容编码在Header定义)。浏览器总是用当前机器的缺生编码方式解码HTTP HEADER,所以对你的例子,如果Server用GB2312 Encoding,Client用GB2312 Decoding,就没有问题。如果Client的缺生Encoding不是GB2312,就有问题了(比如我的机器,缺省Encoding是英文,UTF-8,通过你的连接就不能得到正确的中文文件名)。

.NET WebRequest总是用UTF-8解码HTTP Header(至少我没发现如何改变这种行为),所以如果Server用的是GB2312,那么结果总是不会对。唯一的办法是对string重新编码(纯粹Hack行为):

                if (key == "Content-Disposition")
                {
                    string str = res.Headers[key];
                    byte[] bt = new byte[str.Length];
                    for (int i = 0; i < str.Length; ++ i )
                    {
                        bt[i] = (byte)str[i];
                    }
                    Console.WriteLine("{0} = {1}",
                        key,
                        Encoding.GetEncoding("GB2312").GetString(bt));
                }
14、一个局部变量通常通过指定的类型名称和说明符来定义,它指定了变量名称和一个任意的初始值<A local variable is defined by specifying a type name and a declarator that specifies the variable name and an optional initial value>(ECMA-334 C# 8.3 Variables and parameters)

1、变量是类或者结构中的字段,如果没有进行显示赋值,在默认状态下创建相应变量时,其值为对应类型默认值。

2、方法的局部变量必须在代码中显示初始化,之后才可以在语句中进行使用。

15、SqlConnection的Close和Dispose是一样的效果,区别是Dispose之后不能再Open。

C语言/C++编程题 之 时钟(分针追赶时针,分针与时针相遇次数问题)

题目描述 有一个标准的12小时时钟,它有一个时针,一个分针。现问你,在给定的两个时刻之间分针与时针相遇几次? 输入 输入包含多组测试数据。每组输入包含4个整数,前两个数字分别表示起...
  • ESESZB
  • ESESZB
  • 2016年07月01日 21:08
  • 1527

编程之美 - 爬楼梯问题

问题: 电梯在高峰时为了提高效率,当人们进入电梯选择好楼层后,根据算法只停在其中的一层。这个算法要求电梯里所有的人爬楼梯的总数最少。 想法 I:算是穷举法吧,把每个人可能会爬的楼层数都计...
  • wangzhiyu1980
  • wangzhiyu1980
  • 2016年01月26日 21:21
  • 1361

C语言OJ项目参考(2964) 查闰年

2964: 查闰年Description   大家知道如何判断某一年是否是闰年吗?这个问题可难坏了小编,小编在写一个查找m年到n年之间闰年的程序,却苦于判断闰年的函数不会写,据说 今天你有上机课,我...
  • sxhelijian
  • sxhelijian
  • 2016年11月08日 09:48
  • 1152

编程小问题和Tips(数据库)

1、sql numberic(m,n) m是总位数 n 是小数位 identity(1,1)自动从1开始编号插一行系统自动加1 2、grant all privileges(所有权限) on *.*(...
  • peng_bin1989
  • peng_bin1989
  • 2012年03月31日 14:09
  • 382

Android开发小问题tips---持续更新中~

(1) 给AVD安装apk?      主要解决API4.0以上版本google输入法bug,需要给AVD安装搜狗输入法。      打开需要安装的AVD, 将搜狗输入法apk放入SDK/tools文...
  • u012476249
  • u012476249
  • 2014年01月09日 11:17
  • 1303

C#案例——解决你的小问题哦

  • 2011年04月25日 15:52
  • 3KB
  • 下载

C#高效编程TIPS

摘录自这个微博http://www.cnblogs.com/luminji/ 1 as,is转型比强制转型的优势 优势在于as,is 不抛出异常,如果转型失败,则返回null 强制转型则会...
  • yixiantian7
  • yixiantian7
  • 2013年09月13日 16:00
  • 772

工作中遇到的关于C#字符串处理小问题。《记录经验》

C#字符处理经验之谈。
  • Agou_66
  • Agou_66
  • 2016年04月16日 17:31
  • 2451

socket编程小问题:地址已经被使用——Address already in use

很多socket编程的初学者可能会遇到这样的问题:如果先ctrl+c结束服务器端程序的话,再次启动服务器就会出现Address already in use这个错误,或者你的程序在正常关闭服务器端so...
  • luckywang1103
  • luckywang1103
  • 2013年06月19日 20:44
  • 742

Visual Studio 2010 编程中可能会遇到的一个小问题

Visual Studio 2010 编程中可能会遇到的一个小问题
  • u011335616
  • u011335616
  • 2014年05月13日 18:18
  • 1939
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程小问题和Tips(C#)
举报原因:
原因补充:

(最多只允许输入30个字)