Top 15 不起眼却有大作用的 .NET功能集
来源:互联网 发布:怎么加盟淘宝网店 编辑:程序博客网 时间:2024/06/09 15:01
目录
1. ObsoleteAttribute
2。设置默认值属性:DefaultValueAttribute
3。DebuggerBrowsableAttribute
4。??运算符
5。咖喱及部分方法
6。WeakReference的
7。懒
8。BigInteger的
9。非官方关键字:__ arglist中__reftype __makeref __refvalue
10。Environment.NewLine
11。ExceptionDispatchInfo
12。Environment.FailFast
13。Debug.Assert的,Debug.WriteIf及Debug.Indent
14。的Parallel.For及Parallel.Foreach
15。IsInfinity方法
本文介绍了净 及部分方法...
1. ObsoleteAttribute
ObsoleteAttribute: 可适用于除程序集、模块、参数或返回值以外的所有程序元素。将元素标记为 Obsolete 可实现通知用户的功能,表明该元素在产品之后的新版本中会被移除。
Message属性包含一个字符串,可获取变通方法消息,是对可选程序元素的说明。
ISERROR属性:是布尔类型,如果将值设为“True”,则编译器会将使用已过时的程序元素视为错误。
1: 公共 静态 类 ObsoleteExample
2: {
3: //马克OrderDetailTotal为过时。
4: [ObsoleteAttribute( “ 此属性(DepricatedOrderDetailTotal)是过时使用InvoiceTotal了吧。” ,假)]
5: 公共 静态 小数 OrderDetailTotal
6: {
7: 获得
8: {
9: 回归 12米;
10: }
11: }
12:
13: 公共 静态 小数 InvoiceTotal
14: {
15: 获得
16: {
17: 回报 25米;
18: }
19: }
20:
21: //马克CalculateOrderDetailTotal为过时。
22: [ObsoleteAttribute( “。此方法已过时呼叫CalculateInvoiceTotal代替”,真)]
23: 公共 静态 十进制 CalculateOrderDetailTotal()
24: {
25: 回报 0米;
26: }
27:
28: 公共 静态 十进制 CalculateInvoiceTotal()
29: {
30: 回报 1米;
31: }
32: }
如果运行程序,编译器就会报错以及警告。
1: Console.WriteLine(ObsoleteExample.OrderDetailTotal);
2: Console.WriteLine();
3: Console.WriteLine(ObsoleteExample.CalculateOrderDetailTotal());
2.通过“DefaultValueAttribute”属性可设置缺省值
DefaultValueAttribute指定属性的默认值。可以使用任何值创建DefaultValueAttribute。成员的默认值通常是其初始值。可视化设计器可以使用默认值重置成员的值。代码生成器也可使用默认值确定是否为成员生成代码,但是必须在成员函数中设置初始值。
1: 公共 类 DefaultValueAttributeTest
2: {
3: 公共 DefaultValueAttributeTest()
4: {
5: //使用各个属性的默认值欢迎使用属性实际设置,通过反射。
6: 的foreach(PropertyDescriptor的道具在 TypeDescriptor.GetProperties(本))
7: {
8: DefaultValueAttribute ATTR =(DefaultValueAttribute)prop.Attributes [ typeof运算(DefaultValueAttribute)];
9: 如果(!ATTR = 空)
10: {
11: prop.SetValue(此,attr.Value);
12: }
13: }
14: }
15:
16: [默认值(25)]
17: 公共 INT年龄{搞定; 组; }
18:
19: [默认值(“安东”)]
20: 公共 字符串名字{获得; 组; }
21:
22: [默认值(“安格洛夫”)]
23: 公共 字符串名字{获得; 组; }
24:
25: 公共 重写 字符串的ToString()
26: {
27: 返回 字符串 .Format(“{0} {1} {2}” ,这 .FirstName,这 .LastName,这个。年龄);
28: }
29: }
3. DebuggerBrowsableAttribute
表示成员是否在调试器变量窗口显示以及如何显示。
1: 公共 静态 类 DebuggerBrowsableTest
2: {
3: 私有 静态 字符串 squirrelFirstNameName;
4: 私有 静态 字符串 squirrelLastNameName;
5:
6: //下面DebuggerBrowsableAttribute阻止它后面的财产
7: //出现在该类的调试窗口。
8: [DebuggerBrowsable(DebuggerBrowsableState.Never)]
9: 公共 静态 字符串 SquirrelFirstNameName
10: {
11: 获得
12: {
13: 返回 squirrelFirstNameName;
14: }
15: 集
16: {
17: squirrelFirstNameName = 价值 ;
18: }
19: }
20:
21: [DebuggerBrowsable(DebuggerBrowsableState.Collapsed)
22: 公共 静态 字符串 SquirrelLastNameName
23: {
24: 获得
25: {
26: 返回 squirrelLastNameName;
27: }
28: 集
29: {
30: squirrelLastNameName = 价值 ;
31: }
32: }
33: }
逐步调试程序时,就会发现代码会一直在执行:
1: DebuggerBrowsableTest.SquirrelFirstNameName = “Hammy” ;
2: DebuggerBrowsableTest.SquirrelLastNameName = “书童” ;
4. ??操作符
?? 运算符称作空合并运算符。如果此运算符的左操作数不为 空值的类型,则会引发InvalidOperationException异常异常。
1: INT?X = 零 ;
2: INT Y = X?-1;
3: Console.WriteLine(“Y现在等于-1,因为x为空=> {0}”,Y);
4: 诠释我= DefaultValueOperatorTest.GetNullableInt()?? 默认值(INT);
5: Console.WriteLine( “ 我现在等于0,因为GetNullableInt()返回null => {0}” ,我);
6: 串 S = DefaultValueOperatorTest.GetStringValue();
7: Console.WriteLine( “ 返回”未指定“,因为s为null => {0}”,S ?? “未指定”);
5.咖喱及部分方法
咖喱方法是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
1: 公共 静态 类 CurryMethodExtensions
2: {
3: 公共 静态 Func键<A,Func键<B,Func键<C,R >>>咖喱<A,B,C,R>(此 Func键<A,B,C,R> F)
4: {
5: 返回 A => B => C => F(A,B,C);
6: }
7: }
如果无法确定成员函数的返回类型可使用无功执行。
Partial— Partial类型允许我们将一个类、接口或结构分成好几个部分,分别实现在几个不同的.cs文件中。关键字partial是一个上下文关键字,只有和class、struct、interface放在一起时才有关键字的含义。因此partial的引入不会影响现有代码中名称为partial的变量。
1: 公共 静态 类 CurryMethodExtensions
2: {
3: 公共 静态 Func键<C,R>偏<A,B,C,R>(此 Func键<A,B,C,R> F,A一,B二)
4: {
5: 返回 C => F(A,B,C);
6: }
7: }
6.了WeakReference
弱引用表示类型化弱引用,即在引用对象的同时仍然允许垃圾回收来回收该对象。如果你想使用该引用,可以设置为强引用类型,保证该对象不被回收。
1: WeakReferenceTest hugeObject = 新 WeakReferenceTest();
2: hugeObject.SharkFirstName = “沙基” ;
3: WeakReference的W = 新的WeakReference(hugeObject);
4: hugeObject = 空 ;
5: 所以GC.Collect();
6: Console.WriteLine((w.Target 为 WeakReferenceTest).SharkFirstName);
7.懒<T>
Lazy<T>提供对延迟一些大资源或资源紧张的对象的初始化的支持。在程序的生存期内,特别是在这种方式创建或执行可能不发生使用延迟初始化延迟一种或大量占用资源的对象的创建、资源的任务的执行。
1: 公共 抽象 类 ThreadSafeLazyBaseSingleton <T>
2: 其中, T:新的()
3: {
4: 私人 静态 只读懒<T>为lazy = 新懒人<T>(()=> 新 T());
5:
6: 公共 静态牛逼实例
7: {
8: 获得
9: {
10: 返回 lazy.Value;
11: }
12: }
13: }
8. BigInteger的
BigInteger的类型 属性。
1: 字符串 positiveString = “91389681247993671255432112000000” ;
2: 字符串 negativeString = “-90315837410896312071002088037140000” ;
3: 的BigInteger posBigInt = 0;
4: 的BigInteger negBigInt = 0;
5:
6: posBigInt = BigInteger.Parse(positiveString);
7: Console.WriteLine(posBigInt);
8: negBigInt = BigInteger.Parse(negativeString);
9: Console.WriteLine(negBigInt);
9.未官方记录的C#关键字:__arglist __reftype __makeref __refvalue
第9条奖的关键字官方文档并没有记录,可能正在测试中。然而这些关键字丰富了Visual工作室编辑器的功能,也能被识别。
开发人员可以使用__makeref关键字创建变量。使用__refvalue修饰变量可以从TypedReference中获得变量值。__arglist关键字与params的作用相同,可以访问参数列表。
1: 诠释我= 21;
2: TypedReference TR = __makeref(ⅰ);
3: 键入t = __reftype(TR);
4: Console.WriteLine(t.ToString());
5: INT RV = __refvalue(TR,INT);
6: Console.WriteLine(RV);
7: ArglistTest.DisplayNumbersOnConsole(__ arglist中(1,2,3,5,6));
为了使用__arglist,需要定义ArglistTest类
1: 公共 静态 类 ArglistTest
2: {
3: 公共 静态 无效 DisplayNumbersOnConsole(__ arglist中)
4: {
5: ArgIterator AI = 新 ArgIterator(__ arglist中);
6: 而(ai.GetRemainingCount()> 0)
7: {
8: TypedReference TR = ai.GetNextArg();
9: Console.WriteLine(TypedReference.ToObject(TR));
10: }
11: }
12: }
10. Environment.NewLine
获取为此环境定义的换行字符串。
1: Console.WriteLine( “ 换行:{0}第一行{0}第二行{0}三线”,Environment.NewLine);
11. ExceptionDispatchInfo
表示捕获特定点的异常情况。可以使用ExceptionDispatchInfo.Throw方法,命名空间为System.Runtime.ExceptionServices。
1: ExceptionDispatchInfo possibleException = 空 ;
2:
3: 尝试
4: {
5: INT .Parse( “ 一”);
6: }
7: 抓(FormatException前)
8: {
9: possibleException = ExceptionDispatchInfo.Capture(除息);
10: }
11:
12: 如果(!possibleException = 空)
13: {
14: possibleException.Throw();
15: }
12. Environment.FailFast()
如果想退出程序,且不需要调用任何最后块或终结,可以使用故障快速防护。
1: 字符串 s =到Console.ReadLine();
2: 尝试
3: {
4: 诠释我= INT .Parse(S);
5: 如果(我== 42)Environment.FailFast( “ 特殊号码进入了”);
6: }
7: 最后
8: {
9: Console.WriteLine( “ 计划完成”);
10: }
13. Debug.Assert的&Debug.WriteIf&Debug.Indent
Debug.Assert——检查条件;如果条件为 false,则显示一个消息框,其中会显示调用堆栈。Debug.Assert尽在调试版中有效,在发布版中如果要执行断言,则使用Trace.Assert。
Debug.Assert的(1 == 0, “ 这个数字是不相等的哦,我的上帝!”);
如果断言在调试模式下失败,则会显示下图:
14&的Parallel.For Parallel.Foreach
多线程的情况下较为常用。
Parallel.For-执行循环,迭代可以运行。
1: INT [] = NUMS Enumerable.Range(0,1000000).ToArray();
2: 长总= 0;
3:
4: //使用类型参数进行分类汇总一个长期的,不是int
5: 的Parallel.For < 长 >(0,nums.Length,()=> 0,(J,循环,小计)=>
6: {
7: 小计+ = NUMS [J]。
8: 返回小计;
9: },
10: (X)=> Interlocked.Add(参考总,x)的
11 );
12:
13: Console.WriteLine( “ 总的是{0:N0}” ,总数);
Interlocked.Add方法将两个整型值相加,并将结果保存到第一个数值,可以作为原子操作。
Parallel.Foreach--执行的foreach(在Visual Basic中中为一个)操作,其中在分区程序上可能会并行运行迭代。
15. IsInfinity
判断数值的正负情况。
1: Console.WriteLine(“IsInfinity(3.0 / 0)== {0}”,Double.IsInfinity(3.0 / 0) ? "true" : "false" ); 原文链接:http://www.codeproject.com/Articles/1021335/Top-Underutilized-Features-of-NET
目录
1. ObsoleteAttribute
2。设置默认值属性:DefaultValueAttribute
3。DebuggerBrowsableAttribute
4。??运算符
5。咖喱及部分方法
6。WeakReference的
7。懒
8。BigInteger的
9。非官方关键字:__ arglist中__reftype __makeref __refvalue
10。Environment.NewLine
11。ExceptionDispatchInfo
12。Environment.FailFast
13。Debug.Assert的,Debug.WriteIf及Debug.Indent
14。的Parallel.For及Parallel.Foreach
15。IsInfinity方法
本文介绍了净 及部分方法...
1. ObsoleteAttribute
ObsoleteAttribute: 可适用于除程序集、模块、参数或返回值以外的所有程序元素。将元素标记为 Obsolete 可实现通知用户的功能,表明该元素在产品之后的新版本中会被移除。
Message属性包含一个字符串,可获取变通方法消息,是对可选程序元素的说明。
ISERROR属性:是布尔类型,如果将值设为“True”,则编译器会将使用已过时的程序元素视为错误。
1: 公共 静态 类 ObsoleteExample
2: {
3: //马克OrderDetailTotal为过时。
4: [ObsoleteAttribute( “ 此属性(DepricatedOrderDetailTotal)是过时使用InvoiceTotal了吧。” ,假)]
5: 公共 静态 小数 OrderDetailTotal
6: {
7: 获得
8: {
9: 回归 12米;
10: }
11: }
12:
13: 公共 静态 小数 InvoiceTotal
14: {
15: 获得
16: {
17: 回报 25米;
18: }
19: }
20:
21: //马克CalculateOrderDetailTotal为过时。
22: [ObsoleteAttribute( “。此方法已过时呼叫CalculateInvoiceTotal代替”,真)]
23: 公共 静态 十进制 CalculateOrderDetailTotal()
24: {
25: 回报 0米;
26: }
27:
28: 公共 静态 十进制 CalculateInvoiceTotal()
29: {
30: 回报 1米;
31: }
32: }
如果运行程序,编译器就会报错以及警告。
1: Console.WriteLine(ObsoleteExample.OrderDetailTotal);
2: Console.WriteLine();
3: Console.WriteLine(ObsoleteExample.CalculateOrderDetailTotal());
2.通过“DefaultValueAttribute”属性可设置缺省值
DefaultValueAttribute指定属性的默认值。可以使用任何值创建DefaultValueAttribute。成员的默认值通常是其初始值。可视化设计器可以使用默认值重置成员的值。代码生成器也可使用默认值确定是否为成员生成代码,但是必须在成员函数中设置初始值。
1: 公共 类 DefaultValueAttributeTest
2: {
3: 公共 DefaultValueAttributeTest()
4: {
5: //使用各个属性的默认值欢迎使用属性实际设置,通过反射。
6: 的foreach(PropertyDescriptor的道具在 TypeDescriptor.GetProperties(本))
7: {
8: DefaultValueAttribute ATTR =(DefaultValueAttribute)prop.Attributes [ typeof运算(DefaultValueAttribute)];
9: 如果(!ATTR = 空)
10: {
11: prop.SetValue(此,attr.Value);
12: }
13: }
14: }
15:
16: [默认值(25)]
17: 公共 INT年龄{搞定; 组; }
18:
19: [默认值(“安东”)]
20: 公共 字符串名字{获得; 组; }
21:
22: [默认值(“安格洛夫”)]
23: 公共 字符串名字{获得; 组; }
24:
25: 公共 重写 字符串的ToString()
26: {
27: 返回 字符串 .Format(“{0} {1} {2}” ,这 .FirstName,这 .LastName,这个。年龄);
28: }
29: }
3. DebuggerBrowsableAttribute
表示成员是否在调试器变量窗口显示以及如何显示。
1: 公共 静态 类 DebuggerBrowsableTest
2: {
3: 私有 静态 字符串 squirrelFirstNameName;
4: 私有 静态 字符串 squirrelLastNameName;
5:
6: //下面DebuggerBrowsableAttribute阻止它后面的财产
7: //出现在该类的调试窗口。
8: [DebuggerBrowsable(DebuggerBrowsableState.Never)]
9: 公共 静态 字符串 SquirrelFirstNameName
10: {
11: 获得
12: {
13: 返回 squirrelFirstNameName;
14: }
15: 集
16: {
17: squirrelFirstNameName = 价值 ;
18: }
19: }
20:
21: [DebuggerBrowsable(DebuggerBrowsableState.Collapsed)
22: 公共 静态 字符串 SquirrelLastNameName
23: {
24: 获得
25: {
26: 返回 squirrelLastNameName;
27: }
28: 集
29: {
30: squirrelLastNameName = 价值 ;
31: }
32: }
33: }
逐步调试程序时,就会发现代码会一直在执行:
1: DebuggerBrowsableTest.SquirrelFirstNameName = “Hammy” ;
2: DebuggerBrowsableTest.SquirrelLastNameName = “书童” ;
4. ??操作符
?? 运算符称作空合并运算符。如果此运算符的左操作数不为 空值的类型,则会引发InvalidOperationException异常异常。
1: INT?X = 零 ;
2: INT Y = X?-1;
3: Console.WriteLine(“Y现在等于-1,因为x为空=> {0}”,Y);
4: 诠释我= DefaultValueOperatorTest.GetNullableInt()?? 默认值(INT);
5: Console.WriteLine( “ 我现在等于0,因为GetNullableInt()返回null => {0}” ,我);
6: 串 S = DefaultValueOperatorTest.GetStringValue();
7: Console.WriteLine( “ 返回”未指定“,因为s为null => {0}”,S ?? “未指定”);
5.咖喱及部分方法
咖喱方法是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
1: 公共 静态 类 CurryMethodExtensions
2: {
3: 公共 静态 Func键<A,Func键<B,Func键<C,R >>>咖喱<A,B,C,R>(此 Func键<A,B,C,R> F)
4: {
5: 返回 A => B => C => F(A,B,C);
6: }
7: }
如果无法确定成员函数的返回类型可使用无功执行。
Partial— Partial类型允许我们将一个类、接口或结构分成好几个部分,分别实现在几个不同的.cs文件中。关键字partial是一个上下文关键字,只有和class、struct、interface放在一起时才有关键字的含义。因此partial的引入不会影响现有代码中名称为partial的变量。
1: 公共 静态 类 CurryMethodExtensions
2: {
3: 公共 静态 Func键<C,R>偏<A,B,C,R>(此 Func键<A,B,C,R> F,A一,B二)
4: {
5: 返回 C => F(A,B,C);
6: }
7: }
6.了WeakReference
弱引用表示类型化弱引用,即在引用对象的同时仍然允许垃圾回收来回收该对象。如果你想使用该引用,可以设置为强引用类型,保证该对象不被回收。
1: WeakReferenceTest hugeObject = 新 WeakReferenceTest();
2: hugeObject.SharkFirstName = “沙基” ;
3: WeakReference的W = 新的WeakReference(hugeObject);
4: hugeObject = 空 ;
5: 所以GC.Collect();
6: Console.WriteLine((w.Target 为 WeakReferenceTest).SharkFirstName);
7.懒<T>
Lazy<T>提供对延迟一些大资源或资源紧张的对象的初始化的支持。在程序的生存期内,特别是在这种方式创建或执行可能不发生使用延迟初始化延迟一种或大量占用资源的对象的创建、资源的任务的执行。
1: 公共 抽象 类 ThreadSafeLazyBaseSingleton <T>
2: 其中, T:新的()
3: {
4: 私人 静态 只读懒<T>为lazy = 新懒人<T>(()=> 新 T());
5:
6: 公共 静态牛逼实例
7: {
8: 获得
9: {
10: 返回 lazy.Value;
11: }
12: }
13: }
8. BigInteger的
BigInteger的类型 属性。
1: 字符串 positiveString = “91389681247993671255432112000000” ;
2: 字符串 negativeString = “-90315837410896312071002088037140000” ;
3: 的BigInteger posBigInt = 0;
4: 的BigInteger negBigInt = 0;
5:
6: posBigInt = BigInteger.Parse(positiveString);
7: Console.WriteLine(posBigInt);
8: negBigInt = BigInteger.Parse(negativeString);
9: Console.WriteLine(negBigInt);
9.未官方记录的C#关键字:__arglist __reftype __makeref __refvalue
第9条奖的关键字官方文档并没有记录,可能正在测试中。然而这些关键字丰富了Visual工作室编辑器的功能,也能被识别。
开发人员可以使用__makeref关键字创建变量。使用__refvalue修饰变量可以从TypedReference中获得变量值。__arglist关键字与params的作用相同,可以访问参数列表。
1: 诠释我= 21;
2: TypedReference TR = __makeref(ⅰ);
3: 键入t = __reftype(TR);
4: Console.WriteLine(t.ToString());
5: INT RV = __refvalue(TR,INT);
6: Console.WriteLine(RV);
7: ArglistTest.DisplayNumbersOnConsole(__ arglist中(1,2,3,5,6));
为了使用__arglist,需要定义ArglistTest类
1: 公共 静态 类 ArglistTest
2: {
3: 公共 静态 无效 DisplayNumbersOnConsole(__ arglist中)
4: {
5: ArgIterator AI = 新 ArgIterator(__ arglist中);
6: 而(ai.GetRemainingCount()> 0)
7: {
8: TypedReference TR = ai.GetNextArg();
9: Console.WriteLine(TypedReference.ToObject(TR));
10: }
11: }
12: }
10. Environment.NewLine
获取为此环境定义的换行字符串。
1: Console.WriteLine( “ 换行:{0}第一行{0}第二行{0}三线”,Environment.NewLine);
11. ExceptionDispatchInfo
表示捕获特定点的异常情况。可以使用ExceptionDispatchInfo.Throw方法,命名空间为System.Runtime.ExceptionServices。
1: ExceptionDispatchInfo possibleException = 空 ;
2:
3: 尝试
4: {
5: INT .Parse( “ 一”);
6: }
7: 抓(FormatException前)
8: {
9: possibleException = ExceptionDispatchInfo.Capture(除息);
10: }
11:
12: 如果(!possibleException = 空)
13: {
14: possibleException.Throw();
15: }
12. Environment.FailFast()
如果想退出程序,且不需要调用任何最后块或终结,可以使用故障快速防护。
1: 字符串 s =到Console.ReadLine();
2: 尝试
3: {
4: 诠释我= INT .Parse(S);
5: 如果(我== 42)Environment.FailFast( “ 特殊号码进入了”);
6: }
7: 最后
8: {
9: Console.WriteLine( “ 计划完成”);
10: }
13. Debug.Assert的&Debug.WriteIf&Debug.Indent
Debug.Assert——检查条件;如果条件为 false,则显示一个消息框,其中会显示调用堆栈。Debug.Assert尽在调试版中有效,在发布版中如果要执行断言,则使用Trace.Assert。
Debug.Assert的(1 == 0, “ 这个数字是不相等的哦,我的上帝!”);
如果断言在调试模式下失败,则会显示下图:
14&的Parallel.For Parallel.Foreach
多线程的情况下较为常用。
Parallel.For-执行循环,迭代可以运行。
1: INT [] = NUMS Enumerable.Range(0,1000000).ToArray();
2: 长总= 0;
3:
4: //使用类型参数进行分类汇总一个长期的,不是int
5: 的Parallel.For < 长 >(0,nums.Length,()=> 0,(J,循环,小计)=>
6: {
7: 小计+ = NUMS [J]。
8: 返回小计;
9: },
10: (X)=> Interlocked.Add(参考总,x)的
11 );
12:
13: Console.WriteLine( “ 总的是{0:N0}” ,总数);
Interlocked.Add方法将两个整型值相加,并将结果保存到第一个数值,可以作为原子操作。
Parallel.Foreach--执行的foreach(在Visual Basic中中为一个)操作,其中在分区程序上可能会并行运行迭代。
15. IsInfinity
判断数值的正负情况。
1: Console.WriteLine(“IsInfinity(3.0 / 0)== {0}”,Double.IsInfinity(3.0 / 0) ? "true" : "false" ); 原文链接:http://www.codeproject.com/Articles/1021335/Top-Underutilized-Features-of-NET16. 开发工具
ComponentOne Studio for ASP.NET 是一整套完备的开发工具包,用于在各种浏览器中创建和设计具有现代风格的Web应用程序。
- Top 15 不起眼却有大作用的 .NET功能集
- Top 15 不起眼却有大作用的 .NET功能集
- 不起眼的事
- 不起眼的Data协议
- 不起眼的javascript协议
- 一个不起眼的公告
- SQLServer2005的Top功能
- SQLServer2005的Top功能
- SQLServer2005的Top功能
- SQLServer2005的Top功能
- 15个不起眼但非常强大的 Vim 命令
- 15个不起眼但非常强大的 Vim 命令
- 15个不起眼但非常强大的 Vim 命令
- 15个不起眼但非常强大的 Vim 命令
- javascript中top的作用
- js中top的作用
- javascript中top的作用
- 一个不起眼的小问题
- Ubuntu学习笔记1-文件夹共享2种方法
- eclipse快捷键
- 区域赛总结
- Activity启动模式设置
- 【Unity特效】永恒战士3中的死亡特效
- Top 15 不起眼却有大作用的 .NET功能集
- Android网络通信篇:Socket TCP(简易聊天室)
- 服务自动化部署平台之Saltstack总结
- UnbondLocalError: local variable referenced before assigment
- Eval()时间格式化
- PowerShell 之 DNS Server (2)
- android 第三方recovery刷机
- java socket参数详解:BackLog
- 其他类型的标签