如何检查歌曲未被添加至播放列表?(Contains方法无法生效)
解决播放列表重复添加歌曲的问题
我来帮你搞定这个问题——你碰到的核心问题是Windows Media Player的Playlist对象根本没有内置的Contains方法,所以你原来代码里那行!customPlaylist.Contains(usersInput)肯定跑不通。另外还有个容易踩的小坑:你每次点击按钮都新建一个"Custom Playlist",这会导致之前添加的歌曲直接丢失,得先找已存在的播放列表,找不到再创建新的。
下面是修正后的完整代码,我给你拆解下关键改动:
private void btnAddToPlaylist_Click(object sender, EventArgs e) { // 处理用户输入:去掉前后空格、转小写、补全后缀 string usersInput = txtBoxSongName.Text.Trim().ToLower() + ".mp3"; // 预设的可用歌曲列表 List<string> songNames = new List<string> { "rock and roll.mp3", "wake up.mp3", "floating away.mp3", "inside.mp3" }; // 第一步:先验证用户输入的歌曲是否在可用列表里 if (!songNames.Contains(usersInput)) { MessageBox.Show("The following song is not available."); return; } // 第二步:获取已存在的自定义播放列表,没有则新建 IPlaylist customPlaylist = null; foreach (IPlaylist playlist in player.playlistCollection.getAll()) { if (playlist.name.Equals("Custom Playlist", StringComparison.OrdinalIgnoreCase)) { customPlaylist = playlist; break; } } if (customPlaylist == null) { customPlaylist = player.playlistCollection.newPlaylist("Custom Playlist"); } // 第三步:手动检查歌曲是否已在播放列表中(替代不存在的Contains方法) bool isSongAlreadyAdded = false; foreach (IWMPMedia mediaItem in customPlaylist.items) { // 从媒体文件的源地址里提取文件名,转小写后对比 string mediaFileName = System.IO.Path.GetFileName(mediaItem.sourceURL).ToLower(); if (mediaFileName == usersInput) { isSongAlreadyAdded = true; break; } } // 第四步:根据检查结果执行操作 if (!isSongAlreadyAdded) { IWMPMedia newMedia = player.newMedia(usersInput); customPlaylist.appendItem(newMedia); MessageBox.Show("Song added to playlist successfully!"); } else { MessageBox.Show("This song is already in your playlist."); } }
核心改进说明:
- 修复播放列表丢失问题:不再每次点击都新建播放列表,而是先遍历播放器的播放列表集合,找到已存在的"Custom Playlist",保证之前添加的歌曲不会消失。
- 替代
Contains方法:通过遍历播放列表的items集合,提取每个媒体文件的文件名(从sourceURL里截出来),和用户输入做大小写不敏感的比对,实现歌曲存在性检查。 - 输入健壮性优化:给用户输入加上
Trim(),避免不小心输入的前后空格导致匹配失败。
这样就能完美实现你的需求:验证输入歌曲是否可用,同时防止重复添加到播放列表啦。
内容的提问来源于stack exchange,提问作者Brett Koenig
相关产品推荐
相关产品推荐

