2015-08-17 82 views
0

假设有一个代码(在服务器端发生错误):有没有办法尝试在C#中捕获静态属性?

public class Foo{ 

    private static readonly Int32 MyProp = 10/Convert.ToInt32("0"); 

    public Foo() { 
     /// some initialization 
    } 
} 
+0

你想要的地方(任何地方),你可以写一些代码来捕获错误(如静态构造函数),或者是你想(特别是)从某处捕获异常*外的'富的* '班? –

+0

1)您可以编写一个静态函数,将其结果分配给属性。该函数可以使用它喜欢的任何异常处理。 2)你可以使用'Lazy '类型的静态字段,这样它只会在实际访问该值时抛出。 3)为什么你的静态属性甚至抛出异常?这是一个相当可疑的想法。考虑使用依赖注入单例代替。 – CodesInChaos

回答

4

移动初始化从进入到静态构造函数

public class Foo{ 
    private static readonly Int32 MyProp; 

    public Foo() { 
     /// some initialization 
    } 

    // static constructor for static initialization 
    static Foo() { 
     try { 
     MyProp = 10/Convert.ToInt32("0"); 
     } 
     catch (SomeException e) { 
     ... 
     } 
    } 
    } 
+0

由于静态构造函数的存在会影响静态初始化的发生并且即使在初始化后很长时间会导致静态字段访问速度变慢,因此在某些情况下,用作字段初始值设定项的静态函数可能更可取。 – CodesInChaos

+0

Thx作出决定 – Sevenbi

0

,如果你使用静态什么财产..?

private static int MyProperty 
{ 
    get 
    { 
     try 
     { 
      return 10/Convert.ToInt32("0"); 
     } 
     catch (Exception e) 
     { 
      return -1; 
     } 
    } 
} 
+0

问题指出“服务器端出现错误”,所以*初始化*(服务器被称为*一次*) 解决方案的开销可能比* property *更少。妥协方案是使用'懒惰' –

相关问题