TryParse使用 理解out参数原理

今天看有有朋友在问try catch,TryParse,substring等知识点问题.就在处随便写写与总结下

----------------try catch----------------

作用: 简单理解为,尝试(try)执行一段代码,如果执行后有隐式错误时,将抓取(catch)错误信息。即保护程序出现异常,导致无法正常运行

使用:

try{  

   可能出显异常的语句

}

catch//一般catch子句

{

}

catch (ExceptionType1) //特定Catch子句

{  

}

 catch(ExceptionType e)//带有对象特定Catch子句

{  

}

finally

{  

  //不管是否抛出异常都执行,并且为最后执行 

}

执行顺序:

1.执行try中代码

2.如果try中出现异常,将尝试抓取异常信息  

  a.存在多个特定Catch子句时,系统按顺序搜索Catch子句列表,第一个匹配该异常对象类型时被执行catch中代码。  

  b.执行finally语句

4.如果try中不出现异常,执行finally语句

catch语句有三种

1.一般catch子句:它能抓取任何异常

2.特定Catch子句:它抓取指定的异常常

3.带有对象特定Catch子句:它能抓取指定异常并存在变量中如e,称为异常变量,通过它能获取关于引起的异常详细信息

 

特定Catch子句允许多个,但一般catch子句只允许一个。

--以上只是对try catch finally简单使用与说明,希望深入研究时,可以去了解如何抛出和throw new 语句、搜索调用栈等。

下面为使用例子:

int i = 0;

try {    

  int i2=5/i;

}

catch (InvalidCastException e)

{    

  throw (e);   

}

----------------TryParse------

作用:类型转换,简单的理解为:尝试(try)转换指定类型,如果转换成功返回true,转换失败返回false

使用:

int i;

bool isNumber= int.TryParse("5",out i);//尝试把字符串转为int类型,并存在i中;转换成功时,返回true,否则转为:false

使用tryparse时,需要理解一点就是输出参数out。

这里简单带过,如:

static void Main(string[] args)

{   

  int num = 1;//给初始值也没用   

  MyOut(out num);   

  Console.WriteLine(num.ToString());//输入出   

  Console.ReadKey();

}

static void MyOut(out int i)

{  

  i = 2;//使用前必须赋值     i++;

}

执行的原理:

1.声明一个值类型num存于栈中。

2.调用MyOut时,在内存创建一个i,同样存于num所在的栈中

3.i=2时,栈中的数据改为2,同时num也变为2.

如果num为引用类型时,将声明一个堆区用于存数据。栈中存放着num与i的指向到堆中数据。

回过头来看下 int.TryParse("5",out i);

可以用反编译工具查看下内容,这里我就不具体查看了。 简单理解大致是:

1.判断“5”是否为数字类型。

2.如果“5”为数字类型反回true,并且把该值符给i所在的栈。

3.如果“5”不是数字类型返回false。

提示一下,转换的时候,不一定只有int类型。可以有DateTime等。

一般使用TryParse,可以换转类型,与此同学判断它是否为指定类型。

---------------Substring----------

 作用:截取字符串中指定字符串 使用:

string str="substringusd";

string s1= str.SubString(1);//一个int类型参数,代表以第几位为开始,截取后面所有字符串

string s2=str.SubString(1,9);//两个int类型参数,第一个参数代表字符串起始位置,第二个参数为,需要截取的长度(并非是截取到那位)

以上s1为"ubstringusd",s2为"ubstringu";

注意:

重载1中的一个参数必须为正整数,并且小于字符串长度,否则截取异常

重载2中的两个参数的截取的长度不能超出索引范围

------------equals--------------------

作用:比较两个值是否相等

使用: string str="456";

bool isEquals=str.equals("456");

str与“456”相等时,返回true,不相等时反加false

原理: 刚查了一下反编译中代码。内部比较比较复杂,没看出个什么。网上收集点信息如下:

MSDN给我们列出了一些准则

除涉及浮点型的情况外,x.Equals(x) 都返回true。

 x.Equals(y) 返回与 y.Equals(x) 相同的值。

如果 x 和 y 都为NaN,则 x.Equals(y) 返回true。

当且仅当 x.Equals(z) 返回true时,(x.Equals(y) && y.Equals(z)) 才返回true。

只要不修改 x 和 y 引用的对象,对 x.Equals(y) 的相继调用将返回相同的值。

x.Equals(nullNothingnullptrnull 引用(在 Visual Basic 中为Nothing)) 返回false。

equals与"=="区别与效率:

http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124338.html

http://www.cnblogs.com/ju2ender/archive/2010/03/21/1691033.html

注意:一般字符串比较请少用==.有时反回结果非你意想之中(具体我还没查出,貌似与ASCII码之类有关,谁知道的非常欢迎解说一下)

累,手都酸了。以上为本人理解,有什么不道或有误之处,希望大家多多提出。

posted @ 2012-04-03 00:34  IT小猪  阅读(620)  评论(0编辑  收藏  举报