代码:
public Constructor(string vConnection_String)
{
try
{
mConnection_String = vConnection_String;
}
catch (Exception ex)
{
ExceptionHandler.CatchEx(ex);
}
}
我认为对此进行编程的人“只是小心点”,但是出于兴趣,在这里执行字符串赋值的行上可以抛出哪些异常?我能想到System.OutOfMemoryException,但其他人呢?
谢谢
答案 0 :(得分:3)
在我看来,这里什么都不会发生。如果您使用类似subversion的内容,那么您可能会看到有人在此处删除了一些代码而未删除异常处理。否则它只是愚蠢。
您可以毫无疑问地删除详细代码。
答案 1 :(得分:3)
我看不出它会如何产生异常。我想程序员只有一个他使用的ctor模板:
try
{
/// Put Ctor code here!
}
catch (Exception ex)
{
ExceptionHandler.CatchEx(ex);
}
答案 2 :(得分:3)
Herb Sutter写了几篇关于异常安全的精彩文章,在one of them中他展示了3种异常安全性:
基本保证
强有力的保证
nothrow保证
这个原则在C ++世界中是众所周知的,但是我们也可以在.net世界中使用它们,因为其中一个在你的情况下发生。
如果mConnection_String是一个System.String类型的字段(或其他引用类型),那么这个代码是“nothrow guarantee”,因为简单赋值 引用类型< / strong>根本不能抛出异常。
答案 3 :(得分:2)
这里不太可能发生OutOfMemoryException
,因为字符串未被复制并且不需要分配新的内存。
答案 4 :(得分:2)
没有我能想到的。甚至不是内存异常。字符串存储在string pool中。如果在程序中有两次相同的字符串,它们都引用字符串池中的相同字符串实例。
另请参阅String.Intern()
的文档。
编辑:正如评论中指出的那样,字符串池在这里是无关紧要的,因为这只是一个引用赋值(但是有一些关于它的信息是有用的,尽管它与它没有任何关系)问题,抱歉)。在赋值后,两个变量都将指向内存中完全相同的对象,并且没有声明新的内存。
答案 5 :(得分:1)
... ThreadAbortException? (但是在阻塞之后它会再次被抛出。)
答案 6 :(得分:0)
抛出的异常取决于mConnection_String
是什么。
如果mConnection_String
是字段,则不太可能抛出任何异常。 Try..Catch逻辑可能只是标准的样板代码,所以当代码稍后添加时,它就在try ... catch块中。
如果mConnection_String
是属性,则它可以抛出任何可以在set属性中抛出(而不是捕获)的异常。您必须查看set属性以查看可能的内容。