发表评论或者留言需要审核,请不要发AD或者涉及敏感词汇
欢迎优秀个人博客交换首页链接(PR 4以下或者被K的勿扰,非博客要求PR 5以上)
欢迎优秀个人博客交换首页链接(PR 4以下或者被K的勿扰,非博客要求PR 5以上)
Aug
15
Jul
10
如下代码,一眼可以看出来输出结果显然应该是-1
然尔今天写代码时候遇到这个诡异的问题,不管如何变换,IndexOf("〇")结果总是0,也就是匹配任意字符串的开始部分.甚是奇怪,至今不明白为什么会是这个结果-_-!
通过IL反汇编得到如下结果:
即"〇"对应值是bytearray (07 30 ),初步猜想,此字符应该是特殊字符,在.net编译时做了特殊处理.具体回头查查资料先...
说明一下:"〇"是日文中常用字符,可以通过日文输入法输入maru(まる)得到
static void Main()
{
int intIndex = -1;
string strTest = "xxxxx";
string strMaru = "〇";
intIndex = strTest.IndexOf(strMaru);
Console.WriteLine(intIndex);
Console.Read();
}
{
int intIndex = -1;
string strTest = "xxxxx";
string strMaru = "〇";
intIndex = strTest.IndexOf(strMaru);
Console.WriteLine(intIndex);
Console.Read();
}
然尔今天写代码时候遇到这个诡异的问题,不管如何变换,IndexOf("〇")结果总是0,也就是匹配任意字符串的开始部分.甚是奇怪,至今不明白为什么会是这个结果-_-!
通过IL反汇编得到如下结果:
.method private hidebysig static void Main() cil managed
{
.entrypoint
// 代码大小 37 (0x25)
.maxstack 2
.locals init ([0] int32 intIndex,
[1] string strTest,
[2] string strMaru)
IL_0000: nop
IL_0001: ldc.i4.m1
IL_0002: stloc.0
IL_0003: ldstr "xxxxx"
IL_0008: stloc.1
IL_0009: ldstr bytearray (07 30 ) // .0
IL_000e: stloc.2
IL_000f: ldloc.1
IL_0010: ldloc.2
IL_0011: callvirt instance int32 [mscorlib]System.String::IndexOf(string)
IL_0016: stloc.0
IL_0017: ldloc.0
IL_0018: call void [mscorlib]System.Console::WriteLine(int32)
IL_001d: nop
IL_001e: call int32 [mscorlib]System.Console::Read()
IL_0023: pop
IL_0024: ret
} // end of method Program::Main
{
.entrypoint
// 代码大小 37 (0x25)
.maxstack 2
.locals init ([0] int32 intIndex,
[1] string strTest,
[2] string strMaru)
IL_0000: nop
IL_0001: ldc.i4.m1
IL_0002: stloc.0
IL_0003: ldstr "xxxxx"
IL_0008: stloc.1
IL_0009: ldstr bytearray (07 30 ) // .0
IL_000e: stloc.2
IL_000f: ldloc.1
IL_0010: ldloc.2
IL_0011: callvirt instance int32 [mscorlib]System.String::IndexOf(string)
IL_0016: stloc.0
IL_0017: ldloc.0
IL_0018: call void [mscorlib]System.Console::WriteLine(int32)
IL_001d: nop
IL_001e: call int32 [mscorlib]System.Console::Read()
IL_0023: pop
IL_0024: ret
} // end of method Program::Main
即"〇"对应值是bytearray (07 30 ),初步猜想,此字符应该是特殊字符,在.net编译时做了特殊处理.具体回头查查资料先...
说明一下:"〇"是日文中常用字符,可以通过日文输入法输入maru(まる)得到
Dec
6
一个老生常谈的问题,事情的由来是这样的:
昨天公司某新人练习Asp.Net多层架构,教其项目引用的相关设置时,随手写了个"using Test = XXX.Model;",他说没见过这样的写法,然后就跟他简单讲了下using的用法,继而有了这篇日志
using最常见的用法就是"using System;",表示引用相关的命名空间.
如果该命名空间过长或者不好记,而下面代码显然是要用到,则可以像下面这样
另外using关键字还可以用来自动清除对象如下:
上面的代码using会自动调用MyObject的Dispose方法来清除对象.
如果MyObject未实现IDispose接口则编译无法通过
昨天公司某新人练习Asp.Net多层架构,教其项目引用的相关设置时,随手写了个"using Test = XXX.Model;",他说没见过这样的写法,然后就跟他简单讲了下using的用法,继而有了这篇日志
using最常见的用法就是"using System;",表示引用相关的命名空间.
如果该命名空间过长或者不好记,而下面代码显然是要用到,则可以像下面这样
using Test = Xxx.Framework.Utility;
....
Test.xxx()....
....
Test.xxx()....
另外using关键字还可以用来自动清除对象如下:
using ( MyObject myObject = new MyObject ( ) )
{
Console.WriteLine ( "Hello World!" ) ;
}
{
Console.WriteLine ( "Hello World!" ) ;
}
上面的代码using会自动调用MyObject的Dispose方法来清除对象.
如果MyObject未实现IDispose接口则编译无法通过






