在Foreach循环中无法将类型“char”转换为“string”

时间:2012-09-27 18:18:05

标签: asp.net

我有一个隐藏字段,其中填充了ID的javascript数组。当我尝试迭代隐藏字段(称为“hidExhibitsIDs”)时,它给出了一个错误(在标题中)。

这是我的循环:

foreach(string exhibit in hidExhibitsIDs.Value)
        {
            comLinkExhibitToTask.Parameters.AddWithValue("@ExhibitID", exhibit);
        }

当我将鼠标悬停在.value上时,它表示它是“字符串”。但是,当我将“字符串展览”更改为“int exhibit”时,它会起作用,但会给我一个内部错误(现在不重要)。

6 个答案:

答案 0 :(得分:4)

您需要将string转换为string array,以便在循环建议中使用for for循环到get strings not characters。假设逗号是隐藏字段中的分隔符,隐藏字段值将按split转换为字符串数组。

foreach(string exhibit in hidExhibitsIDs.Value.Split(','))
{
     comLinkExhibitToTask.Parameters.AddWithValue("@ExhibitID", exhibit);
}

答案 1 :(得分:2)

Value正在返回String。当您在foreach上执行String时,它会迭代其中的各个字符。价值实际上是什么样的?在尝试使用数据之前,您必须正确解析它。

您的代码现在正在做些什么的示例:

var myString = "Hey";
foreach (var c in myString)
{
    Console.WriteLine(c);
}

将输出:

H
e
y

答案 2 :(得分:2)

您可以使用Char.ToString转换

链接:http://msdn.microsoft.com/en-us/library/3d315df2.aspx

如果您想转换char

标签,可以使用此功能
char[] tab = new char[] { 'a', 'b', 'c', 'd' };
string str = new string(tab);

答案 3 :(得分:1)

在服务器端,Value(或HiddenField)的HtmlInputHidden属性只是string,其枚举器返回char个结构。您需要将其拆分以迭代您的ID。

如果使用JavaScript数组在客户端设置隐藏字段的值,它将是服务器端的逗号分隔字符串,因此这样的内容将起作用:

foreach(string exhibit in hidExhibitsIDs.Value.Split(','))
{
     comLinkExhibitToTask.Parameters.AddWithValue("@ExhibitID", exhibit);
}

答案 4 :(得分:1)

Value是一个字符串,它实现IEnumerable<char>,所以当你foreach超过字符串时,它会循环遍历每个字符。

我会运行调试器,看看隐藏字段的实际值是什么。它不能是一个数组,因为当POST发生时,它会被转换为一个字符串。

答案 5 :(得分:1)

  public static string reversewordsInsentence(string sentence)
        {
            string output = string.Empty;
            string word = string.Empty;
            foreach(char c in sentence)
            {
                if (c == ' ')
                {
                    output = word + ' ' + output;
                    word = string.Empty;
                }
                else
                {
                    word = word + c;
                }
            }
            output = word + ' ' + output;
            return output;
        }