什么异常可以string = string throw除了System.OutOfMemoryException?

时间:2010-08-26 14:13:51

标签: c# .net string exception

代码:

  public Constructor(string vConnection_String)
  {
     try
     {
        mConnection_String = vConnection_String;
     }
     catch (Exception ex)
     {
        ExceptionHandler.CatchEx(ex);
     }
  }

我认为对此进行编程的人“只是小心点”,但是出于兴趣,在这里执行字符串赋值的行上可以抛出哪些异常?我能想到System.OutOfMemoryException,但其他人呢?

谢谢

7 个答案:

答案 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种异常安全性:

  1. 基本保证

  2. 强有力的保证

  3. nothrow保证

  4. 这个原则在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属性以查看可能的内容。