【发布时间】:2015-03-19 02:40:32
【问题描述】:
希望这不是太复杂,我只是想知道为什么这个 switch 语句不起作用。 Band 是父类,子类是不同类型的乐队(RockBand、JazzCombo、SoloAct,默认)。当我使用 switch 语句时,它会捕获并产生错误,只加载 2 个波段。语法有什么问题吗?
class Bands
{
private List<Band> bands = new List<Band>();
private Dictionary<string, Band> bandsByName = new Dictionary<string, Band>();
public Bands()
{
string fileName = @"C:\Users\Lkvideorang\Documents\Visual Studio 2013\Projects\KernRadio\KernRadio\bin\Debug\bands.txt";
try
{
using (StreamReader myRdr = new StreamReader(fileName))
{
string line;
while ((line = myRdr.ReadLine()) != null)
{
string[] lineAra = line.Split('|');
switch (lineAra[1])
{
case "RockBand":
Band newBand = new RockBand(lineAra);
bands.Add(newBand);
bandsByName.Add(newBand.Name, newBand);
break;
case "JazzCombo":
Band newt = new JazzCombo(lineAra);
bands.Add(newt);
bandsByName.Add(newt.Name, newt);
break;
case "SoloAct":
Band newB = new SoloAct(lineAra);
bands.Add(newB);
bandsByName.Add(newB.Name, newB);
break;
default:
Band ddd = new Band(lineAra);
bands.Add(ddd);
bandsByName.Add(ddd.Name, ddd);
break;
}
}
}
Console.WriteLine("loaded " + bands.Count + " bands");
}
catch
{
Console.WriteLine("Error reading file! Read " + bands.Count + " tunes.");
}
}
摇滚乐队课。这就是我的主要麻烦所在,我的教授希望我们让乐队班的成员成为音乐家,但我真的不明白如何利用它并分配给那个班。我也会发布该课程。
class RockBand : Band
{
private Musician vocalist;
private Musician bass;
private Musician drums;
private Musician guitar;
public RockBand (string[] lineAra) : base (lineAra,)
{
vocalist.Name = lineAra[2];
}
}
类音乐家
class Musician
{
string name;
string instrument;
public string Name
{
get { return name; }
set { name = value; }
}
public string Instrument
{
get { return instrument; }
set { instrument = value; }
}
public Musician(string [] lineAra)
{
name = lineAra[0];
instrument = lineAra[1];
}
}
txt文件长这样
Al & GenJam|JazzCombo|GenJam|GenJam|GenJam|GenJam|Al Biles 约翰·科尔特兰四重奏|爵士组合|麦考伊·泰纳|吉米·加里森|埃尔文·琼斯|约翰·科尔特兰 披头士|摇滚乐队|约翰列侬|保罗麦卡特尼|林戈斯塔尔|乔治哈里森 迈尔斯戴维斯五重奏|爵士组合|赫比汉考克|罗恩卡特|托尼威廉姆斯|迈尔斯戴维斯|韦恩肖特 迈克尔杰克逊|独奏 奇怪的铝|SoloAct 波尔卡朋克|波尔卡乐队 赫比汉考克三重奏|爵士组合|赫比汉考克|罗恩卡特|托尼威廉姆斯花花公子.txt
John Lennon|guitar
Paul McCartney|bass
Ringo Starr|drums
George Harrison|guitar
Al Biles|trumpet
GenJam|code
Michael Jackson|vocals
Weird Al|accordian
John Coltrane|sax
Miles Davis|trumpet
Wayne Shorter|sax
McCoy Tyner|piano
Jimmy Garrison|bass
Elvin Jones|drums
Tony Williams|drums
Herbie Hancock|piano
Ron Carter|bass
另外,如果有一种方法可以让 newBand 在每种情况下重复而不是我为每种情况使用不同的变量,那将是惊人的。提前致谢!!
【问题讨论】:
-
@GrantWinney 感谢您的帮助!这是我得到错误读取文件的错误!读2首曲子。 System.NullReferenceException:对象引用未设置为对象的实例。在 C:\Users\Lkvideorang\Documen ts\Visual Studio 2013\Projects\KernRadio\KernRadio\RockBand.cs:KernRadio.Bands..ctor() 中的 KernRadio.RockBand..ctor(String[] lineAra) 中的第 21 行c:\Users\Lkvideorang\Documents\Visual Studio 20 13\Projects\KernRadio\KernRadio\Bands.cs:line 35
-
@LucasKern RockBand 的构造函数有错误。我猜有一个操作会产生错误。让我们知道 RockBand 代码
-
@LucasKern 发布
Band类代码 - 这可能是错误的来源。我猜你正在尝试索引一个不存在的元素,即奇怪的 Al 条目的 lineAra[2]。 -
@Fendy 好的,我已经编辑了我的帖子。感谢您的帮助!
-
@RagtimeWilly 我已经编辑了帖子,谢谢!
标签: c# database switch-statement streamreader