【问题标题】:Foreach Loop Cannot Convert Char To StringForeach 循环无法将字符转换为字符串
【发布时间】:2015-02-06 20:00:15
【问题描述】:

无论出于何种原因,这看似简单是行不通的。具体来说,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);
            } 
        }    
    }
}

顺便说一句 我想知道,当我在这里时,你们中是否有人知道是否有可能找出是否有按钮单击,例如关机按钮?或者,如果这不可能,是否有办法知道计算机何时即将关闭。

再次感谢这一切,谢谢。

【问题讨论】:

    标签: c# windows foreach


    【解决方案1】:

    字符串包含字符而不是字符串,改为如下

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

    【讨论】:

      【解决方案2】:

      如果担心在特定位置获取子字符串,则使用此选项

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

      【讨论】:

        【解决方案3】:

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

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

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

        如果您真的想将每个字符添加到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);
        }
        

        【讨论】:

          【解决方案4】:

          看起来您正在尝试做的是遍历文本框的行。 TextBox 对象的 Text 属性属于数据类型 String。

          如果我是正确的,为了实现这一点,您可以执行以下操作:

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

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

          【讨论】:

            【解决方案5】:

            首先,如果你想迭代字符串中的字符,你可以使用一些东西

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

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

            textBox1.Text.ToCharArray()
            

            您可以在此处找到检测断电的答案 How to detect Windows shutdown or logoff

            【讨论】:

              【解决方案6】:

              另一种解决方案是:

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

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

              【讨论】:

                猜你喜欢
                • 2012-09-19
                • 2019-09-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多