2012-01-19 152 views
1

我目前距離工作程序只有2個錯誤。我將發佈包含錯誤和其變量的定義以及錯誤的行。請告訴我我錯了什麼。謝謝。char to string error

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 [字符串]' 具有一些無效參數

錯誤2參數「 1':無法從'字符'轉換爲'字符串'

我使用了字符而不是字符串,因爲如果使用字符串,它將返回字符串的整行加載,我只想返回字符串的第一個字母

例如:數據= A1:000001100000000110000000111000000011100000001

如果使用字符串時,它會返回整條生產線,我只是希望它返回「A」

新發現的問題: 當我輸入數據,我把數據放入'A1'鍵,這就解釋了爲什麼使用字符串,所以當它沒有找到'A1'因爲它是char,它只是找到'A'這就是爲什麼它返回'?',是否有可能,如果我使用字符串ñ只讀了字符串行中的第一個字符'A'?

+1

它正確的出現在錯誤中:你不能從char轉換爲字符串。也許你需要一個Dictionary ? –

+0

我需要字典爲其他函數的字符串,只有這一個我需要返回字符而不是字符串 – hafizhans

回答

1

要字符轉換爲字符串,ToString()可以被調用。這是問題的解決方案。

但是hafizhans正在研究一些程序,他詢問了question,他在那裏將Dictionary<char, bool[]>轉換爲Dictionary<string, bool[]>。現在,他是從字典存儲數據到文本文件,這樣的事情

A1:001110000111100001010100 

現在在閱讀這一點,他只需要A1一部分,所以Split功能的伎倆。 enter image description here

+0

y它工作得很好如果添加字符到程序時,問題只發生在從外部文件加載數據時,因爲它的字符串,它會讀取整行,因此沒有輸出將顯示在識別框中 – hafizhans

+0

爲此,您將需要修改代碼而不是' var ch = line.ToUpper();'do'var ch = line.Split(':')[0] .ToUpper();''內部'btnLoad_Click'函數。 –

+0

正是我爲什麼需要的.Split()函數。非常感謝你,先生! – hafizhans

1

修訂

試試這個:

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

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

當我做這兩行先生,程序停止在某些時候說'給定的鍵不存在字典' – hafizhans

+0

我更新了代碼 –

+0

您的代碼很好,先生沒有錯誤,不幸的是它只是返回'?'每次。我想我知道爲什麼,因爲當我輸入數據時,我把數據放到'A1'鍵中,這解釋了爲什麼使用字符串,所以當它沒有找到'A1'因爲它是字符,它只是找到'A'這就是爲什麼它返回'?',是否有可能如果我使用字符串n只讀字符串行中的'A'的第一個字符? – hafizhans

0

如何更改爲:

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

另外,你可能要考慮改變的關鍵這個詞而是改爲Char。

+0

該程序在某些時候停止說'給定的鍵不存在於字典中' – hafizhans

+0

好吧,您需要檢查字典「ContainsKey」是否在訪問它之前。 –

0

變量ch是最有可能,你必須使用一個字符串,而不是

+0

我必須使用char的原因,如果我使用字符串它會讀整行,有沒有辦法讀取字符串行的第一個字母? – hafizhans

+0

@hafizhans:你的意思是你想在字典中找到以那封信開頭的項目嗎?它不這樣工作。 –

+0

我確實爲該特定數據輸入了'A1'鍵字典 – hafizhans

0

試試下面的一個字符:

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

首先,你需要將項目添加到與Add() method字典。其次,你的字典的鍵是一個字符串,所以你需要使用一個字符串作爲索引...你可以通過在char實例上調用ToString()來獲得字符串的字符串表示形式。

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:

​​
+0

實際上這只是程序的一小部分,我只是認爲可以對這些行進行一些修改來解決錯誤 – hafizhans