簡體   English   中英

如何在實例化時填充字符串數組?

[英]How do I populate a string array upon instantiation?

因此,我創建了一個類,其中包含專輯名稱的屬性,包括專輯的流派,名稱和藝術家,並帶有一個數組來保存曲目列表。 編譯時,將替換屬性的默認值,但是我不知道如何替換數組的默認值-我不知道如何用每個專輯的新曲目替換默認曲目列表。 謝謝。

這是CD.cs文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exercise_2
{
class Cd
{
    string name;
    string artist;
    string genre;
    public string[] tracklist;
    public string[] newTracklist;

    public string getName()
    {
        return name;
    }

    public void setName(string newName)
    {
        name = newName;
    }

    public string getArtist()
    {
        return artist;
    }

    public void setArtist(string newArtist)
    {
        artist = newArtist;
    }

    public string getGenre()
    {
        return genre;
    }

    public void setGenre(string newGenre)
    {
        genre = newGenre;
    }


    public string[] getTracklist()
    {
        return tracklist;
    }

    public void setTracklist(string[] newTracklist)
    {
      string[] tracklist = newTracklist;
    }

    public Cd()
    {
        this.name = "CD Name";
        this.artist = "CD Artist";
        this.genre = "CD Genre";
        this.tracklist = new string[3] { "Track1", "Track2", "Track3" };
        this.newTracklist = new string[3] { "newTrack1", "newTrack2", "newTrack3" };
    }

}
}

這是main.cs文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exercise_2
{
class Exercise2
{
    static void Main()
    {
        Cd CD1 = new Cd();
        CD1.setName("Kill 'Em All");
        CD1.setArtist("Metallica");
        CD1.setGenre("Thrash Metal");          

        Cd CD2 = new Cd();
        CD2.setName("Ride The Lightning");
        CD2.setArtist("Metallica");
        CD2.setGenre("Thrash Metal");

        Cd CD3 = new Cd();
        CD3.setName("Master Of Puppets");
        CD3.setArtist("Metallica");
        CD3.setGenre("Thrash Metal");

        Console.WriteLine(CD1.getName() + " - " + CD1.getArtist() + " - " + CD1.getGenre() + " - " + CD1.getTracklist());
        Console.WriteLine(CD2.getName() + " - " + CD2.getArtist() + " - " + CD2.getGenre());
        Console.WriteLine(CD3.getName() + " - " + CD3.getArtist() + " - " + CD3.getGenre());


    }
}
}

問題是您的setTracklist方法每次都會創建一個新數組:

  public void setTracklist(string[] newTracklist)
    {
      string[] tracklist = newTracklist;
    }

相反,您需要設置實例tracklist成員:

  public void setTracklist(string[] newTracklist)
    {
      tracklist = newTracklist;
    }

另一條建議。 不要創建方法來獲取和設置屬性,它只是不必要的工作。 更改:

string name;
string artist;
string genre;
public string[] tracklist;
public string[] newTracklist;

至:

public string Name {get; set;}
public string Artist {get; set;}
public string Genre {get; set;}
public string[] Tracklist {get; set;}

您可能還想將tracklist List<String>更改為List<String>以便可以輕松添加軌道:

public List<String> Tracklist {get; set;}

如果你這樣做,你可以創建一個Cd實例輕松了不少

var newCD = new Cd
{
   Name = "Kill 'Em All",
   Artist = "Metallica",
   Genre = "Thrash Metal"
};

newCD.Tracklist.Add("Hit the Lights");
newCD.Tracklist.Add("The Four Horsemen");
newCD.Tracklist.Add("Motorbreath");
// etc etc

更新:

這是完整的代碼,以防萬一。 我還實現了getTracklist方法,該方法以逗號分隔的形式返回所有軌道。


using System;
using System.Collections.Generic;

class Cd
{
  public string Name { get; set; }
  public string Artist { get; set; }
  public string Genre { get; set; }
  public List<string> Tracklist { get; set; }

  public Cd()
  {
     Name = "CD Name";
     Artist = "CD Artist";
     Genre = "CD Genre";
     Tracklist = new List<string>();
  }

  public string getTracklist()
  {
     return String.Join(", ", Tracklist);
  }
}

public class Exercise2
{
  public static void Main()
  {
     Cd CD1 = new Cd();
     CD1.Name = "Kill 'Em All";
     CD1.Artist = "Metallica";
     CD1.Genre = "Thrash Metal";

     CD1.Tracklist.Add("Hit the Lights");
     CD1.Tracklist.Add("The Four Horsemen");
     CD1.Tracklist.Add("Motorbreath");

     Cd CD2 = new Cd();
     CD2.Name = "Ride The Lightning";
     CD2.Artist = "Metallica";
     CD2.Genre = "Thrash Metal";

     Cd CD3 = new Cd();
     CD3.Name = "Master Of Puppets";
     CD3.Artist = "Metallica";
     CD3.Genre = "Thrash Metal";

     Console.WriteLine(CD1.Name + " - " + CD1.Artist + " - " + CD1.Genre + " - " + CD1.getTracklist());
     Console.WriteLine(CD2.Name + " - " + CD2.Artist + " - " + CD2.Genre);
     Console.WriteLine(CD3.Name + " - " + CD3.Artist + " - " + CD3.Genre);
  }
}

你只要寫

CD1.setTrackList(new string[] {"Hit The Lights", "The Four Horsemen", "Motorbreath"});

並且您的setTrackList應該顯示為:

 public void setTracklist(string[] newTracklist)
 {
    tracklist = newTracklist;
 }

最初編寫它的方式是,每次設置它時都在創建一個新的音軌數組,而不是設置backing屬性。

但是,有一種更好的方法可以做到這一點。 C#具有所謂的“ 自動屬性” 他們為您處理所有這一切。

public string Name {get; set;}
public string Artist {get; set;}
//.... etc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM