【问题标题】:char to string error字符到字符串错误
【发布时间】:2012-02-14 09:21:39
【问题描述】:

我目前距离工作程序只有 2 个错误。我将发布包含错误的行及其变量的定义,最后是错误。请告诉我哪里错了。谢谢。

    private Dictionary<string, bool[]> letterData = new Dictionary<string, bool[]>();


    public char[] mapNeurons()
    {
        char[] map = new char[this.letters.Items.Count];

        for (int i = 0; i < map.Length; i++)
        {
            map[i] = '?';
        }
        for (int i = 0; i < this.letters.Items.Count; i++)
        {
            double[] input = new double[Form1.DOWNSAMPLE_HEIGHT * Form1.DOWNSAMPLE_WIDTH];
            char ch = ((string)(this.letters.Items[i]))[0];
            bool[] data = this.letterData[ch]; //line contains errors
            for (int j = 0; j < input.Length; j++)
            {
                input[j] = data[j] ? 0.5 : -0.5;
            }

            int best = this.network.Winner(input);
            map[best] = ch;
        }
        return map;
    }

这是错误

错误 1 ​​'System.Collections.Generic.Dictionary.this[string]' 的最佳重载方法匹配有一些无效参数

错误 2 参数 '1':无法从 'char' 转换为 'string'

我使用 Char 而不是 String 因为如果使用 String 它将返回加载的字符串的整行,我只想返回字符串的第一个字母

例如:数据 = A1:000001100000000110000000111000000011100000001

如果使用字符串,它将返回整行,我只希望它返回'A'

新发现的问题: 当我输入数据时,我将数据放入'A1'键中,这解释了为什么我使用字符串,所以当它因为它是字符而没有找到'A1'时,它只是找到'A'这就是它返回'?'的原因,如果我使用字符串 n 是否可以只读取字符串行中的第一个字符“A”?

【问题讨论】:

  • 它就在错误中:您无法将字符转换为字符串。也许你需要一个 Dictionary?
  • 我需要字典是其他函数的字符串,只有这个我需要返回字符而不是字符串

标签: c# string char


【解决方案1】:

首先,您需要使用Add() method 将项目添加到字典中。

其次,你的字典的键是一个字符串,所以你需要使用一个字符串作为索引……你可以通过在char实例上调用ToString()来获得一个char的字符串表示。

char ch = 'x';

private Dictionary<string, bool[]> letterData = new Dictionary<string, bool[]>();
letterData.Add(ch.ToString(), new []{true, false});

bool[] data = this.letterData[ch.ToString()];

或者将索引改为char:

char ch = 'x';

private Dictionary<char, bool[]> letterData = new Dictionary<char, bool[]>();
letterData.Add(ch, new []{true, false});

bool[] data = this.letterData[ch];

【讨论】:

  • 其实这只是程序的一小部分,我只是认为可以对这些行进行一些修改以解决错误
【解决方案2】:
bool[] data = this.letterData[ch.ToString()];

【讨论】:

    【解决方案3】:

    要将字符转换为字符串,可以调用ToString()。这是问题的解决方案。

    但是 hafizhans 正在开发一些程序,为此他询问了 question,并在那里将 Dictionary&lt;char, bool[]&gt; 转换为 Dictionary&lt;string, bool[]&gt;。现在他正在将数据从字典存储到文本文件中,就像这样

    A1:001110000111100001010100
    

    现在在阅读本文时,他只需要A1 部分,所以Split 函数就可以了。

    【讨论】:

    • 是的,如果将字符添加到程序中,它工作得很好,这个问题只发生在从外部文件加载数据时,因为它的字符串,它将读取整行,因此不会显示输出识别框
    • 为此,您需要修改代码而不是 var ch = line.ToUpper(); 在 btnLoad_Click 函数中执行 var ch = line.Split(':')[0].ToUpper();。
    • 正是我需要 .Split() 函数的原因。再次非常感谢您,先生!
    • 是否可以让它读作'A1',但只在识别框上显示'A'?
    • 您可以使用.SubString()。在这里查看MSDN
    【解决方案4】:

    更新

    试试这个:

    if(this.letterData.ContainsKey(ch.ToString()))
        bool[] data = this.letterData[ch.ToString()]; 
    

    或

    if(this.letterData.ContainsKey(ch.ToString()))
        bool[] data = this.letterData[ch+""]; 
    

    【讨论】:

    • 当我做这两行先生时,程序会在某个点停止说'给定的键不在字典中'
    • 您的代码运行良好,先生,没有错误,不幸的是它只是返回'?'每次。我想我知道为什么,因为当我输入数据时,我将数据放入'A1'键中,这解释了为什么我使用字符串,所以当它因为它是字符而没有找到'A1'时,它只是找到'A'这就是为什么它返回“?”,如果我使用字符串 n 是否可以只读取字符串行中的第一个字符“A”?
    【解决方案5】:

    变量ch 很可能是一个字符,你必须使用字符串来代替

    【讨论】:

    • 我必须使用字符,因为如果我使用字符串,它将读取整行,有没有办法只读取字符串行的第一个字母?
    • @hafizhans:您的意思是要在字典中查找以该字母开头的项目吗?它不是那样工作的。
    • 我确实为该特定数据在字典中输入了“A1”键
    【解决方案6】:

    尝试以下方法:

    char charString = 'a';
    if (letterData.ContainsKey(charString.ToString()))
    {
        // Found
    }
    

    【讨论】:

      【解决方案7】:

      要不要改成:

      string sCh = ch.ToString();
      bool[] data = null;
      if (this.letterDate.ContainsKey(sCh)
      {
         data = this.letterData[sCh];
      }
      

      此外,您可能需要考虑将字典上的键改为 Char。

      【讨论】:

      • 程序在某个点停止说“给定的键不在字典中”
      • 好的,你需要在访问之前检查字典ContainsKey。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 2017-04-11
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      相关资源
      最近更新 更多