2015-08-17 111 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 *更少。妥協方案是使用'懶惰' –

相關問題