随笔分类 - .NET基础
摘要:Dictionary是一个键值类型的集合。它有点像数组,但Dictionary的键可以是任何类型,内部使用Hash Table存储键和值。本篇自定义一个类型安全的泛型Dictionary,并且可以被序列化。 为了使自定义的泛型Dictionary可以被序列化成xml,需要实现泛型IXmlSerializable接口。 public class MySerializableDictiona...
阅读全文
摘要:IEnumerable, ICollection, IList,每种接口只适合某些特定场景,如何区别使用呢? IEnumerable接口,只提供了一个获取迭代器的方法,这也是为什么可以使用foreach遍历实现了IEnumerable接口集合的原因。 public interface IEnumerable
{ IEnumerator GetEnumerator();
} ICo...
阅读全文
摘要:关于IEnumerable和IQueryable的区别,这事还要从泛型委托Func说起。来看一个简单的泛型委托例子: class Program { static void Main(string[] args) { Func f = i => i > 5; Console.WriteLine(f(3...
阅读全文
摘要:我们常用IEnumerable,却忽视IEnumerator。简单来说,IEnumerable是可以被循环遍历的集合,IEnumerator实施循环遍历。 接口分别是:public interface IEnumerator
{ bool MoveNext(); object Current{get;} void Reset();
}
public interface ...
阅读全文
摘要:使用委托来做一些事情,大致思路是: 1、定义声明一个委托,规定输入参数和输出类型。2、写几个符合委托定义的方法。3、把方法列表赋值给委托4、执行委托 internal delegate int MyDelegate(); class Program { static void Main(string[] args) { ...
阅读全文
摘要:在.NET4.0中,我可以借助System.Speech组件让电脑来识别我们的声音。 以上,当我说"name",显示"Darren",我说"age",显示"永远21"。如何做呢? 首先要开启电脑的语音识别功能。 右键电脑右下方的扬声器,选择"录音设备"。 点击默认的"麦克风",再点击左下角的"配置"按钮。 点击"启动语音识别"。 一系列简单设置后,屏幕上出现如下: 在VS中创建...
阅读全文
摘要:对于时间日期,有时我们希望以更友好的方式展示,比如几秒钟前,几分钟前,几小时前...... 这其中:1、需要判断输入日期的格式是否正确2、使用TimeSpan计日期时间之间的间隔,然后可以转换成秒、分钟,等等3、最后转换成秒、分钟、小时、天等,以整型显示 class Program { static void Main(string[] args) ...
阅读全文
摘要:当我们想把一个字符串转换成整型int的时候,我们可能会想到如下三种方式:int.Parse,Convert.ToInt32和int.TryParse。到底使用哪种方式呢? 先来考虑string的可能性,大致有三种可能:1、为null2、不是整型,比如是字符串3、超出整型的范围 基于string的三种可能性,分别尝试。 □ 使用int.Parse string str = null;
...
阅读全文
摘要:在C#中,在处理字符串拼接的时候,使用StringBuilder的效率会比硬拼接字符串高很多。到底有多高,如下: static void Main(string[] args) { string str1 = string.Empty; Stopwatch sw1 = new Stopwatch(); ...
阅读全文
摘要:→新建一个项目→选择"其他语言","Visual C++",并选择"win32控制台应用程序",并给控制台应用程序起名。→点击"下一步"→点击"完成"→编写如下#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{ printf("Hello C\n"); getchar(); return 0;
} →点击"...
阅读全文
摘要:缓存很多条数据,但只读取其中的一部分数据,如何处理? 比如在缓存中保存了100条数据,但读取分页数据,比如每次分页只读取10条数据。这种情况下,可以把这100条数据拆分成10次分别保存起来。每一个缓存项的key需要特别的设计,比如:01-10-products, 02-10-products...... 如何避免缓存一些不需要的数据? 比如:public class Teacher
{...
阅读全文
摘要:当涉及到跨进程甚至是跨域传输数据的时候,我们需要把对象序列化和反序列化。 首先可以使用Serializable特性。 [Serializable] public class Person { public string _firstName; public string _secondName; //序列化 ...
阅读全文
摘要:本篇用来梳理对象的创建、垃圾的回收,以及非托管资源的手动处理。 →首先运行应用程序,创建一个Windows进程。 →CLR创建一块连续的虚拟地址空间,这个地址空间就是托管堆。而且,这个地址空间最初并没有对应的物理存储空间。 虚拟地址空间分成2段。一个区段是普通堆,也叫GC堆,大小小于85000字节的引用类型对象的实例被分配在这里;另一个是大对象堆,大小大于等于85000字节的引用类型对象的...
阅读全文
摘要:本篇是针对我在做项目过程中遇到的特定需求而做的一个Demo, 没有很大的通用性,读者酌情可绕行。 标题不能完全表达本意,确切的情景需要展开说。假设有三级分类,关于分类这样设计: public class Category { public int Id { get; set; } public string Name { get; set; }...
阅读全文
摘要:序列化是将对象转换成字节流的过程,反序列化是把字节流转换成对象的过程。对象一旦被序列化,就可以把对象状态保存到硬盘的某个位置,甚至还可以通过网络发送给另外一台机器上运行的进程。本篇主要包括: ● 使用BinaryFormatter类进行序列化和反序列化● 使用ISerializable接口自定义序列化过程● 使用XmlSerializer类进行序列化和反序列化 □ 使用BinaryForm...
阅读全文
摘要:在项目的配置文件Web.config中,会看到节点,以及包含在其中的节点,这显然与程序集有关,这些节点到底何时被用到呢? 在默认情况下,在运行时,JIT编译器将IL代码编译成本地代码时,会查看IL代码中的字段、局部变量、方法参数等引用了哪些类型,然后借助程序集的TypeRef和AssemblyRef元数据,内部使用System.Reflection.Assembly的Load方法来确定需要被加...
阅读全文
摘要:当运行Windows应用程序的时候,CLR总是默默地为服务着。CLR到底是如何被加载并运行呢? 首先,Microsoft专门为CLR定义了一个标准的COM接口。 安装某个版本的.NET Framework,CLR被包含在DLL中,作为COM服务器在Windows注册表中注册。 一台电脑上可能安装多个版本的CLR。打开开发人员命令提示,输入CLRVer.exe,可以看到当前电脑上安装的C...
阅读全文
摘要:引用类型的转换方式有隐式转换、强制转换、as转换等。值类型的转换方式也有不少,本篇稍稍归纳。 □ 隐式转换 int i = 10;
float f = i;
Console.WriteLine(f);
如果是值类型,当被转换变量的数值范围小于目标变量的数值范围,就可以实现隐式转换;如果是引用类型,子类可以隐式转换成父类。 □ 强制转换
float f = 10.56f;
int i = (...
阅读全文
摘要:在C#中,面对链表的场景可使用LinkedList,LinkedList可以被看作是一个集合,集合元素的类型为LinkedListNode ,与其他集合元素不同的是:LinkedListNode不仅存储本身的值,还包含对上一个节点、下一个节点的引用。反编译LinkedListNode可以看到大致如下: public sealed class LinkedListNode{ interna...
阅读全文
摘要:如何取出数组中符合某种条件的元素,然后放在数组最前面,即索引为0的位置? 思路大致如下:→找到符合条件的数组元素,把之赋值给一个临时变量temp,并记下该数组元素的索引位置,假设是index→在源数组中,从索引为0的数组元素开始,拷贝index个数组元素到另外一个目标数组→把临时变量temp赋值给目标数组索引为0的位置 public static class ArrHelper ...
阅读全文
浙公网安备 33010602011771号