变量在其范围之外不可见

时间:2012-11-13 15:24:47

标签: c# .net switch-statement

我有一个单词模板,带有书签等等。大部分工作都很好..但是我在使用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;
问题就像我之前所说的那样,这个变量失去了它的范围,所以它不再存在或者没有价值。
最好的方法是什么.. ??

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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属性,该属性为您提供特定区域的货币符号。