C#如何获取真实IP地址

2996次阅读|7次收藏|231次赞

现在越来越多的网站使用了代理加速方式,比如 新浪、SOHU的新闻,都使用Squid做代理方式,利用多台服务器分流。Squid本身类似透明代理,会发送"HTTP_X_FORWARDED_FOR" ,取"真正"IP地址的方式,还应该判断"HTTP_X_FORWARDED_FOR" 中是否有","逗号,或者长度是否超长。下面介绍C#如何获取真实IP地址

C#插入排序

1772次阅读|279次收藏|226次赞

插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置。下面介绍C#中插入排序的用法

C#冒泡排序

1673次阅读|107次收藏|223次赞

冒泡排序的原理是依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第3个数,大数在后,小数在前,以此类推则将最大的数"滚动"到最后一个位置;第二趟则将次大的数滚动到倒数第二个位置......第n-1(n为无序数据的个数)趟即能完成排序。下面介绍C#中冒泡排序的用法

C#验证身份证号码

2037次阅读|121次收藏|102次赞

15位身份证号码=6位地区代码+6位生日+3位编号,18位身份证号码=6位地区代码+8位生日+3位编号+1位检验码。即身份证号码的情况有:身份证号码为15位数字;身份证号码为18位数字;身份证号码为17位数字+1个字母。下面介绍C#验证身份证号码的方法

c#中list排序

9795次阅读|37次收藏|222次赞

我们通常使用泛型集合来存放数据,常见的如:List 、Dictionary等。在使用这些泛型集合时我们有时需要对其进行排序,一般用到的是继承IComparer<T>接口,实现int IComparer<T>.Compare(T t1, T t2)方法。下面介绍c#中list排序的实现方法

C#选择排序

1676次阅读|422次收藏|48次赞

选择排序是通过每一趟排序过程中从待排序记录中选择出关键字最小(大)的记录,将其依次放在数据表的最前或最后端,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。选择排序的交换操作介于 0 和 (n - 1)次之间,选择排序的比较操作为 n (n - 1)/ 2 次之间,选择排序的赋值操作介于 0 和 3 (n - 1)次之间。

C#中的反射

2300次阅读|193次收藏|215次赞

反射(Reflection)是.NET中的重要机制,通过反射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等,就跟我们普通使用程序集一样。下面简单介绍C#中如何使用反射。

C#快速排序

1919次阅读|263次收藏|96次赞

快速排序是对冒泡排序的一种改进。其思路为:任取待排序序列中的某个元素对象作为基准,按照该元素值的大小,将整个序列划分为左右两个子序列:左侧子序列中所有元素的值都小于或等于基准对象元素的值,右侧子序列中所有元素的值都大于基准对象元素的值,基准对象元素则排在这两个子序列中间(这也是该对象最终应该被安放的位置),接下来分别对这两个子序列重复进行上述过程,直到所有的对象都排在相应位置上为止。

ref和out区别有哪些

1761次阅读|57次收藏|121次赞

在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。两者主要区别是:使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。

C#如何读取csv格式文件

3286次阅读|143次收藏|105次赞

CSV是(逗号分隔值)的英文缩写,通常都是纯文本文件。CSV档包含了四或五个字段(部分),由左至右分别记载着:文件名称、档案大小(以BYTE为单位)、CRC32值(八个英文字母或数字组成)、档案路径和档案内容描述。csv格式文件经常用来作为不同程序之间的数据交互的格式。 那么,C#如何读取csv格式文件呢?

单元测试中Assert类

9582次阅读|178次收藏|387次赞

单元测试可以使用能够创建测试的初始源代码的代码自动生成来创建单元测试,也可以由使用者手动编写测试代码。无论使用何种方法,测试类和所有测试方法都用编程属性加以标识。其主要步骤是通过直接调用类的方法并传递参数来执行其他源代码。然后,如果在测试中包含有Assert语句,他可以测试得到值与我们所期望的值是否相符。下面介绍单元测试中Assert类的用法

dropdownlist绑定枚举值

2666次阅读|203次收藏|252次赞

在项目中,我们已习惯将较稳定的分类标准定义为枚举,来保证程序中取值的合法性,也使代码更清晰。某些情况下我们需要在DropDownList等选择控件上绑定某个枚举的所有枚举值,供用户自行选择,这时就需要将枚举值转换为DropDownList等的选项值,可以用反射获取所有的枚举值绑定DropDownList上。

C#静态变量、静态方法、静态类

9038次阅读|398次收藏|313次赞

C#中静态变量、静态方法、静态类通过static关键字修饰,不能使用 new 关键字创建静态类的实例。静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量;静态成员变量是和类相关联的,可以作为类中"共"有的变量,不依赖特定对象的存在,访问的时候通过类名加点操作符加变量名来访问.

C#中Serializable序列化

4324次阅读|11次收藏|336次赞

序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。下面简单介绍C#中如何利用Serializable序列化

非托管资源的回收

2934次阅读|68次收藏|162次赞

GC(垃圾收集器)只能回收托管(Managed)内存资源,对于数据库连接、文件句柄、Socket连接等这些资源(非托管资源,UnManaged)就需要控制资源的回收。在C#里面有2种机制来回收未托管资源:声明一个析构函数(或终结器),作为类的一个成员;实现IDisposable接口,但需要确保执行Dispose()方法。