2012-11-13 64 views
-3

我有一個單詞模板,帶有書籤等。這些工作中的大部分都很好......但我在switch語句中遇到了麻煩..我失去了它的範圍。
變量在其範圍之外不可見

我有它檢查適用於保險保費的貨幣類型,如果「英鎊」,那麼它替換文本「斤」與「£」標誌,同樣爲歐元和美元等

我在這裏的原因是要求建議或承認,我的想法是正確和可能的。

我認爲會工作的是,如果這是一個單獨的'方法/功能',如果你願意..但缺乏從哪裏開始的知識/專業知識。

我有一展身手,但Visual Studio是有沒有的吧..這裏是switch語句:

switch (sCurrency.Trim()) 
{ 
    case "Pounds": 
     sCurType = "L"; 
     break; 
    case "Euros": 
     sCurType = "€"; 
     break; 
    case "Dollars": 
     sCurType = "$"; 
     break; 
    default: 
     sCurType = " "; 
     break; 
} 

它,然後繼續以這樣的方式被使用:

t_tbl.Cell(2, 2).Range.Text = sCurType + iExcess; 

問題是,正如我前面所說,這個變量損失了它的範圍,所以它不再存在或不保留任何價值。
什麼最好的方式去這個.. ??

+4

我真的不知道你的問題是什麼,但你爲什麼不乾脆把你'之開關語句靜態方法內,返回值,而不是設置的一個領域? – Groo

回答

1

你可以用這樣的方法做:

private string ToCurrencySymbol(string currency) 
{ 
    string currencySymbol = null; 

    switch (currency.Trim().ToLower()) 
    { 
     case "pounds": 
      currencySymbol = "£"; 
      break; 
     case "euros": 
      currencySymbol = "€"; 
      break; 
     case "dollars": 
      currencySymbol = "$"; 
      break; 
     default: 
      currencySymbol = " "; 
      break; 
    } 

    return currencySymbol 
} 

然後您可以這樣調用:

t_tbl.Cell(2, 2).Range.Text = ToCurrencySymbol(sCurrency) + iExcess; 

不過說真的,你應該使用RegionInfo類,它有一個currencySymbol屬性它爲您提供特定地區的貨幣符號。

+0

在'switch'語句中使用'return'會簡化你的代碼。 – Groo

+0

@格羅,「簡化」是主觀的。我個人不喜歡一個方法中的多個return語句,但這與這個問題無關。 – Polyfun

+0

「簡化」,如「顯着縮短功能的長度和關鍵字的數量」。 – Groo

3

我會建議讓框架在處理貨幣時處理實際的格式。問題是,它不僅僅是獲得正確的符號那麼簡單,你需要格式化實際值本身,即符號位置,小數分隔符等。因此,而不是工作了哪個符號使用,看看你的工作文化你想要基於你的格式如

public CultureInfo GetCultureForCurrency(string currency) 
{ 
    switch (currency) 
    { 
     case "Pounds": 
      return new CultureInfo("en-GB"); // GBP (UK) 
     case "Euros": 
      return new CultureInfo("fr-FR"); // Euros (France) 
     case "Dollars": 
      return new CultureInfo("en-US"); // Dollars (USA) 
      break; 
     default: 
      return Thread.CurrentCulture; // Default system culture 
    } 
} 

使用

var culture = GetCultureForCurrency("Dollars"); 
t_tbl.Cell(2, 2).Range.Text = iExcess.ToString("C", culture); 
+0

+1,我還會提到,可能值得考慮實例化一個新的'CultureInfo'的成本與這個方法被調用的次數。 OP似乎正在更新數據網格,所以一些緩存可能是有用的(這當然超出了這個問題的範圍)。 – Groo

+0

而不是將字符串作爲字符串傳遞,請考慮使用應用程序計劃支持的所有值的枚舉。 – Servy

+0

@Groo yep緩存可能是一個好主意,可能是作爲靜態幫助類的好消息。但是,這更多的是表現性的東西,所以我不想用這種東西來擴大答案。 – James