我正在創建一個簡單的MP3播放器,以查看字典的工作原理。我在我的項目中有6個班,其中2個班不相關。第一類包括標籤,第二類是搜索,第三類是遊戲,第四類是抽象類,包括字典。搜索和播放類都從第四類繼承。C#字典鍵不存在
當我去搜索時,對象已成功添加到字典Dictionary dict<string, Tags>
,並且標籤是從標籤類添加的。 我的問題是,當我嘗試從Play類獲得字典路徑時,它說密鑰不存在。 代碼是dict[playSongName].Path;
,其中playSongName是它存儲在字典中的歌曲的名稱。
class Player : Liste
{
public void Play(string playSongName)
{
currentSongPath = dictPesmi[playSongName].Path; // Error here, key was not found
currentSongName = playSongName;
media.Source = new Uri(currentSongPath);
media.Play();
}
}
abstract class Liste
{
public Dictionary<string, Tagi> dictPesmi = new Dictionary<string, Tagi>();
public Id3TagClass id3tagi = new Id3TagClass();
}
class Search : Liste
{
string[] filesFound;
const string extension = "*.mp3";
public void Find(string searchPath)
{
if (Directory.Exists(searchPath))
{
filesFound = Directory.GetFiles(searchPath, extension, SearchOption.AllDirectories);
foreach (string filePath in filesFound)
{
string[] filePathSplit = filePath.Split('\\');
string fileName = filePathSplit[filePathSplit.Length - 1];
dictPesmi[fileName] = new Tagi() { Path = filePath, Name = fileName };
dictPesmi[fileName].Author = id3tagi.GetArtist(filePath);
dictPesmi[fileName].Album = id3tagi.GetAlbum(filePath);
dictPesmi[fileName].Title = id3tagi.GetTitle(filePath);
System.Windows.MessageBox.Show(dictPesmi[fileName].Path);
}
}
}
}
class Tagi
{
string path;
string name;
string title;
string author;
string album;
public string Album
{
get { return album; }
set { album = value; }
}
public string Author
{
get { return author; }
set { author = value; }
}
public string Title
{
get { return title; }
set { title = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public string Path
{
get { return path; }
set { path = value; }
}
}
主要類
public partial class MainWindow : Window
{
Player player = new Player();
Search search = new Search();
// string selectedSong;
public MainWindow()
{
InitializeComponent();
}
public void KeyDownEvent_(object sender, KeyEventArgs e)
{
if (e.Key == Key.F1)
player.Play(lbPlaylist.Items[lbPlaylist.Items.IndexOf(lbPlaylist.SelectedItem)].ToString());// passed string
if (e.Key == Key.F3)
search.Find(tbSearch.Text);
if (e.Key == Key.F5)
{
foreach (Tagi d in search.dictPesmi.Values)
{
if (!lbPlaylist.Items.Contains(d.Name))
lbPlaylist.Items.Add(d.Name);
}
}
if (e.Key == Key.F9)
{
}
}
當我按下這裏的F1所描述的錯誤顯示出來
嗨jonjohnson,你可以把相關代碼所以我們可以看到你在做什麼? –
沒有人可以幫助你沒有代碼.. :) – Wolf
嘗試寫一個[簡短,自包含,正確的例子](http://sscce.org/)來說明你的問題 - 否則幾乎不可能診斷你的問題。也許你忘了修剪你的輸入?也許你忘了比較區分大小寫? – Adam