接收错误CS0030:当我尝试运行此下拉列表时,无法将类型'char'转换为'string'

时间:2014-03-06 22:27:23

标签: c# string list drop-down-menu compiler-errors

我对C#很新,并且被我工作的公司抛弃了,所以我为我对这一切的极端缺乏了解而道歉。该站点使用下拉列表,因此用户可以选择一种语言来查看该站点。这是我开始使用的代码,它完美地运行。

protected void CreateLanguageList()
{
    // Get the available cultures.
    string[] cultures = Telerik.Localization.Configuration.ConfigHelper.Handler.Cultures.Split(',');

    foreach (string availableCulture in cultures)
    {
        var culture = new CultureInfo(availableCulture.Trim());
        var item = new ListItem(culture.NativeName, culture.ToString());
        LanguageSelector.Items.Add(item);

        if (culture.ToString() == currentCultureString)
        {
            item.Selected = true;
        }
    }
}

现在我们正在迁移到更新的CMS,不再支持Telerik.Localization。在联系他们的支持后,他们说我可以使用此代码访问语言文件,并使用DisplayName()属性访问文化名称:

var allCultures = AppSettings.CurrentSettings.AllLanguages.ToList();

由于到目前为止我对C#缺乏了解(我正在努力自学),如果我不需要,我不想更改代码,所以我找到了我可以转换的地方一个字符串的列表,我想这将允许我留下其余的代码,只需要将一个调用更改为语言文件。但是,当我尝试运行此代码时,我收到了CS0030错误:

protected void CreateLanguageList()
{
    // Get the available cultures.
    var allCultures = AppSettings.CurrentSettings.AllLanguages.ToList();
    string combinedCultures = string.Join(",", allCultures);

    foreach (string availableCulture in combinedCultures)
    {
        var culture = new CultureInfo(availableCulture.Trim());
        var item = new ListItem(culture.NativeName, culture.ToString());
        LanguageSelector.Items.Add(item);

        if (culture.ToString() == currentCultureString)
        {
            item.Selected = true;
        }
    }
}

任何帮助解释我做错了什么以及如何解决这个问题都会受到极大的赞赏。

2 个答案:

答案 0 :(得分:0)

你的问题是combinedCultures被定义为字符串,但是你试图用foreach中的类型字符串迭代它。当你遍历字符串时,你会得到字符。你应该能够完全摆脱combinedCultures变量并使用allCultures预先使用。

答案 1 :(得分:0)

此处的问题是,foreach仅适用于availableCulture,因为类型string隐式地是char的数组。

我不确定你在做什么,但是当你需要直接传递数组时,看起来你正在将数组转换为字符串。