由于前段时间为了写工具学的太J8粗糙 加上最近一段时间太浮躁 所以静下心来复习 一遍以前学的很弱的一些地方
1 委托
public delegate double weituo(double a, double b);public static double test1(double a,double b){return a * b;}public static double test2(double a,double b){return a / b;}public static void test3(weituo test){Console.WriteLine(test(2.5, 0.5));}static void Main(string[] args){//weituo test;//test = test2;//test3(test); }
多播委托
weituo test;
test = test1;
test += test2;
test3(test);
但是要求test1 test2方法必须没有返回值即void
匿名函数
public delegate double weituo(double a);static void Main(string[] args){weituo f3 = delegate(double x){return 3 * x + 5;};Console.WriteLine(f3(3.5));}
Lambada函数
weituo f3 = (double x) => { return 3 * x + 5; };Console.WriteLine(f3(3.5));
file与filestream读取文件的区别
file读取文件,是一次性把文件全都装载到内存当中。这个对于几百K,几M的文件还可以,但是对于
几个G的文件就尴尬了。据说,有个面试题是,面对几个G的txt文件,你怎么检索。
filestream 文件流读取文件。按照个人设定的容量,每次读取这么多,分批次处理,比如一个200M的txt,
我规定每次读取5M,再来个for循环,就可以把这200M的东西,化整为零,逐批次处理。
C#string与stringBuilder的区别
string的缺点是每次字符串变量的内容发生了改变时,都必须重新分配内存。你想想,如果创建一个迭代100000次的循环,每次迭代都将一个字符连接到字符串,这样内存中就会有100000个字符串,每个字符串仅仅与前一个字符串相伴只是有一个字符不同,性能影响是很大的。StringBuilder通过分配一个缓存,就是一个工作区来解决这些问题,在工作区中队字符串应用StringBuilder类的相关方法。包括添加,删除,移除,插入和替换字符等等。执行完之后,将调用ToString方法把工作区中的内容转换为一个字符串,方便赋给一个字符串变量。这样StringBuilder会提升一些性能。
正则表达式复习
可选字符集
数量限定符
string text2 = "lg log loog looog loooog looooog";Regex expression = new Regex(@"l(oo)+g"); 代表()+表示括号内的一次或者多次 不加括号代表左边一个 其他都是这样
* = >0个或多个 + = >1个或多个
? = >0次或1次
lo{3}g 匹配到looog l(00){3}g 匹配到loooooog
lo{3,}g表示3往上次数looog loooog 无上限
lo{3,5}g3次到5次
*?将前面的字符重复0次或多次 尽量少重复
+?一次活多次尽量少重复
贪婪匹配(@"<.*>");
懒惰匹配(@"<.*?>");
^从头部开始匹配
$从末尾开始匹配
^和$类似还有\b在正则表达式前面跟^一样 在后面跟$一样