2017-05-24 12 views
-1

loadedMachinesと呼ばれるオブジェクトMachineの単純なリストがあります。 2つの新しいMachineオブジェクトを追加し、2番目の引数はmachineName属性です。私のforeachループを出力しているいくつかの理由からC#オブジェクト変数が正しく返されない

loadedMachines.Add(new Machine("0", "My cool Yaris", "Toyota")); 
loadedMachines.Add(new Machine("1", "My sporty car", "Ferrari")); 

foreach (Machine m in loadedMachines) 
    { 
     Console.WriteLine("Machine being added is: " + m.machineName); 
    } 

「マシンが追加されている:」とm.machineNameは、私のマシンオブジェクトと連携することではないようです。

この理由は何ですか?ここに私のクラス定義である:あなたのコンストラクタで

public class Machine 
{ 
    public Machine() { } 

    public string Id { get; set; } 
    public string machineName { set; get; } 
    public string machineType { set; get; } 
    public string category { set; get; } 
    public string make { set; get; } 
    public string modelNumber { set; get; } 
    public string information { set; get; } 
    public string ownersManualLocation { set; get; } 
    public string safetyChecklistSchedule { set; get; } 
    public string maintenanceService { set; get; } 
    public DateTime registrationExpiry { set; get; } 

    public Machine(string id, string machineName, string machineType) 
    { 
    } 
} 
+6

あなたのコンストラクタは与えたパラメータで何もしないので、 'machineName'は値に設定されません。 –

+1

うわー、私はとてもばかげています。私は 'this.machineName = machineName'に感謝する必要があります。スペンサー –

+0

なぜこれをダウン表示しましたか? –

答えて

2

、あなたはこのように、入力パラメータからプロパティを割り当てる必要があります:

public Machine(string id, string machineName, string machineType) 
{ 
    Id = id; 
    this.machineName = machineName; 
    this.machineType = machineType; 
} 

注意点として、あなたは一般的に使用することをお勧めしますプロパティーとは異なるパラメーター名。 Microsoftのは、基準が大文字のプロパティ名を使用し、その代わりにpublic string machineName { set; get; }の、あなたはそれを行う場合は、コンストラクタはthisとプロパティの接頭辞にする必要はありませんpublic string MachineName { set; get; }

を持っていると思い命名示唆しました。

+0

ジョン、ありがとう、あなたは間違いなく、何時間も画面を凝視した後、間違っている! –

1

コンストラクタの代わりにプロパティ初期化子を使用することもできます。このような何か:

loadedMachines.Add(new Machine() {Id = "0", machineName = "My cool Yaris", machineType = "Toyota"}); 

構文のこの種のエンティティのような動的に構築されているオブジェクトを、使用しているとき多くのフレームワークは、動的に作成上のパラメータを持つコンストラクタの呼び出しをサポートしていないため、一般的です。

関連する問題