Foreach循环不能将字符转换为字符串

时间:2014-12-09 02:00:52

标签: c# windows foreach

这看似简单无论出于何种原因都行不通。特别是Foreach循环给我这个错误“错误1无法将类型'char'转换为'string'”。我做了一些研究,虽然它不想揭示它的自我。希望你们知道,非常感谢你的帮助。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace A_HtmlEditor
{
    public partial class Form1 : Form
    {
        AutoCompleteStringCollection data = new AutoCompleteStringCollection();

        public Form1()
        {
            InitializeComponent();
        }               

        // The error occurs in the foreach loop below    
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            webBrowser1.DocumentText = textBox1.Text;

            foreach(string s in textBox1.Text)
            {
                data.Add(s);
            } 
        }    
    }
}

暂且不说 当我在这里的时候,我很想知道你们中是否有人知道是否有可能找出是否有按钮点击,例如关机按钮?或者,如果不可能,有办法知道计算机何时即将关闭。

我再一次感激,谢谢。

6 个答案:

答案 0 :(得分:7)

textBox1.Text是一个字符串(不是字符串集合)。所以当你这样做时:

foreach (string s in textBox1.Text)
{
    data.Add(s);
}

它正在尝试将字符串视为集合。这实际上有效,因为string实际上是char的数组。问题是,当您声明char时,您正尝试将每个string转换为string s

如果您确实要将每个字符添加到data,那么您可以将每个char转换为string

// This takes each character from textBox1.Text,
// converts it to a string, and adds it to data
foreach (char chr in textBox1.Text)
{
    data.Add(chr.ToString());
}

或者,如果您的textBox1是多行文字框,并且您尝试将每行添加到data,则可以将NewLine字符上的文字拆分为获取字符串列表,并添加如下:

// This takes each line from a multi-line text box and adds it to data
foreach (string line in textBox1.Text.Split(new[] { '\n' }))
{
    data.Add(line);
}

答案 1 :(得分:2)

您尝试做的事情是遍历文本框的行。 TextBox对象的Text属性是数据类型String。

如果我是正确的,为了做到这一点,你可以做如下的事情:

var lines = textbox.Text.Split((new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var s in lines)
{
   data.Add(s);
}

因为Text属性是单个字符串对象。您需要将字符串拆分为某种分隔符上的较小字符串的集合,例如换行符。 (例如''\ n')

答案 2 :(得分:1)

字符串包含字符而非字符串,请更改为以下内容

foreach(char s in textBox1.Text) //should be renamed to c as char

答案 3 :(得分:0)

首先,如果你想在字符串中迭代字符,你可以使用

        foreach (var s in textBox1.Text)
        {
            data.Add(s.ToString());
        }

如果你想从字符串中获取字符数组,你可以使用

textBox1.Text.ToCharArray()

您可以在此处找到用于检测电源关闭的答案 How to detect Windows shutdown or logoff

答案 4 :(得分:0)

另一个解决方案是:

string[] textBox1.text = webBrowser1.DocumentText
foreach (string s in textBox1.Text)
{
    data.Add(s);
}

通过这样做,它们将被视为单独的str而不是char

答案 5 :(得分:-1)

如果在特定位置获得子串,则使用此

for (int i = 0; i < s.Length; i++)
    {
        Console.WriteLine(s[i]); // or other works 
    }