黑马程序员技术交流社区
标题:
求教关于try catch, TryParse以及几个关键词的用法.
[打印本页]
作者:
天高地阔
时间:
2012-4-2 21:41
标题:
求教关于try catch, TryParse以及几个关键词的用法.
try catch
TryParse
Substring
equals
求教以上这些的用法,最好带上例子,
特别是前2个,我感觉有些时候前2个有些相似的说,
作者:
蔡纯富
时间:
2012-4-2 21:55
try catch是用于捕获异常的,和TryParse毫无关系,
TryParse是一个数据类型进行数据类型转换的一个方法,该方法返回一个bool类型的值,若为false,则表示转换失败,ture表示转换成功;
Substring是截取字符串获得字符串的子串,
equals用于判断两个对象是否相等,返回类型也是bool类型的值
作者:
天高地阔
时间:
2012-4-2 22:12
能不能举点例子,来的明白些{:soso_e121:}
作者:
黄雄斌
时间:
2012-4-2 22:36
private List<Int32> TestParse(String[] strings)
{
Int32 intValue;
List<Int32> intList = new List<int>();
for (int i = 0; i < 5000000; i++)
{
intList.Clear();
foreach (String str in strings)
{
try
{
intValue = Int32.Parse(str);
intList.Add(intValue);
}
catch (System.ArgumentException) { } catch (System.FormatException){ }
catch (System.OverflowException){ }
}
}
return intList;
}
private List<Int32> TestTryParse(String[] strings)
{
Int32 intValue;
List<Int32> intList = new List<int>();
Boolean ret;
for (int i = 0; i < 5000000; i++)
{
intList.Clear();
foreach (String str in strings)
{
ret = Int32.TryParse(str, out intValue);
if (ret)
{
intList.Add(intValue);
}
}
}
return intList;
}
复制代码
作者:
郑帅
时间:
2012-4-3 00:21
本帖最后由 郑帅 于 2012-4-3 00:36 编辑
---------------------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码之类有关,谁知道的非常欢迎解说一下)
累,手都酸了。希望以上的解答对你能所帮助。如有不恰到之处,请多多指出
作者:
天高地阔
时间:
2012-4-3 00:26
十分感谢,正在对着研究...{:soso_e152:}
作者:
张世豪
时间:
2012-4-3 09:40
本帖最后由 张世豪 于 2012-4-3 09:42 编辑
try catch与TryParse没关系,try catch是用来处理异常的,而TryParse是处理类型转化的结果的,TryParse的返回值是bool类型:例如
string s = Console.ReadLine();
int i;
if (int.TryParse(s, out i))
{
Console.WriteLine("转化成功!");
}
Console.ReadKey();
Substring是用来截取字符串的:Substring(要截取的字符串位置,要截取字符串的长度)。
equals是字符串与字符串之间的比较:"abc".Equals("aa"),它的返回值也是bool类型。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2