2012-07-10 70 views
1

我有名爲「config」的類有一個名爲「param」的私有字符串變量。如何使用包含一個變量的類中的多個屬性?

我需要從「config」類「param」變量有時作爲int類型有時作爲布爾類型或字符串。

據我瞭解,我需要創建配置類3個屬性,每個屬性必須轉換類型,如下:

第一個屬性轉換字符串爲int,第二轉換字符串BOOL,第三屬性獲取我字符串值。

類應該是這個樣子:

class Config 
{ 
    private string param; 

    public int ParamAsInt 
    { 
    get 
    { 
     return int.Parse(param); 
    } 
    } 

    public bool ParamAsBool 
    { 
    get 
    { 
     return bool.Parse(param); 
    } 
    } 

    public string ParamAsString 
    { 
    get 
    { 
     return param; 
    } 
    } 

} 

但我不知道如何可以將這些屬性按照到,我想離開類的變量類型中。

回答

4

這段代碼不會編譯 - int等都是保留關鍵字,不能作爲標識符使用。你可以試着命名您的性質類似Int32ValueStringValue等,或試試這個:

public static implicit operator bool (Config config) 
{ 
    return bool.Parse(config.param); 
} 

public static implicit operator int (Config config) 
{ 
    return int.Parse(config.param); 
} 

這將允許更清潔代碼:

Config c = GetConfig("foo"); 
var isFeatureEnabled = false || c; 
var spacing = 23 + GetConfig("bar"); 
+0

至於上面提到的問題,他需要不止一個隱式轉換,我認爲C#不支持(*用戶定義轉換的評估從不涉及多於一個用戶定義或提升的轉換運算符。*) – V4Vendetta 2012-07-10 09:43:53

1

你忘了給你的屬性。你會如何參考他們?類似這樣的:

class Config 
{ 
    private string param; 

    public int ParamAsInt 
    { 
     get 
     { 
      return int.Parse(param); 
     } 
    } 

    public bool ParamAsBool 
    { 
     get 
     { 
      return bool.Parse(param); 
     } 
    } 

    public string ParamAsString 
    { 
     get 
     { 
      return param; 
     } 
    } 
} 

請注意,我還在您撥打電話.Parse()時固定了外殼。 C#區分大小寫。我還用bool.Parse()替換了致電bool.TryParse()。前者(當正確使用時,這不是因爲它缺少一個參數)只會告訴你它是否 a bool,它不會告訴你什麼值bool實際上具有。 (例如,bool.TryParse('false' out someBool)將返回true。)

當然,此代碼有點危險。你會想從一些更防禦性的編程開始檢查這些值。基本上,查找TryParse()以及如何正確使用它。像這樣的東西,例如:

public int ParamAsInt 
{ 
    get 
    { 
     var tmp = default(int); 
     if (int.TryParse(param, out tmp)) 
      return tmp; 
     else 
      // do something else? throw a specific exception? 
    } 
} 

此外,這段代碼的目的是什麼?這似乎是一個非常匆忙和糟糕的設計。對於任何給定的值param(順便說一下,這怎麼可能是設置爲),這只是隨機嘗試爲其顯示類型化屬性。如果你猜對了,你仍然留下一些會拋出異常的東西。當然,有更多更清晰的方式來完成你想要做的事情。那麼你試圖做什麼

相關問題