2016-07-30 8 views
0

Ich habe unter ItemCountAmount.cs Klasse.Eigenschaften der referenzierten Klasse nicht während der internen Zuweisung

public class ItemCountAmount 
{ 
    public int Count { get; set; } 
    public string Amount { get; set; } 
} 

und ich bin Referenzierung es in eine weitere Klasse ChartData.cs wie folgt:

public class ChartData 
{ 
    public ChartData() 
    { 
     Purchase = Stocks = Sales = new ItemCountAmount(); 
    } 
    public string period { get; set; } 
    public ItemCountAmount Purchase { get; set; } 
    public ItemCountAmount Stocks { get; set; } 
    public ItemCountAmount Sales { get; set; } 
} 

Jetzt, wenn ich versuche, die Werte für die ChartData Eigenschaften zuzuweisen, ist es nicht oder verfügbar zu erkennen. Die Ausnahme für die Kompilierungszeit tritt in VS auf.

var model = new ChartData 
{ 
    period = yearMonth, 
    Purchase.Count = await purchase.CountAsync(x => x.order_date.Month == mnth && x.order_date.Year == yr), 

} 

Aber Purchase.Count oder Purchase.Amount ist hier nicht identifiziert, wo in, wenn ich es als

versuchen
var model=new ChartData(); 
model.Purchase.Count = .....; 
model.Purchase.Amount = .....; 
....... 

es funktioniert gut, ich meine, das Eigentum Count und Amount identifiziert wird. Ich verstehe immer noch nicht, warum die erste Methode nicht in der Lage ist, die Eigenschaften aus ItemCountAmount.cs Klasse zu identifizieren, die in ChartData verwiesen wird. Irgendwelche spezifischen Gründe dafür?

+0

versuchen 'var Modell = new Chartdata() { Periode = yearMonth, Purchase.Count = purchase.CountAsync erwarten (x => x.order_date.Month == mnth && x.order_date.Year = = Jahr), } '. Beachten Sie die fehlende '()' –

+0

Was ist der Fehler? –

+1

@KhanhTO Ich denke, wir können so auch initialisieren, es ist legal –

Antwort

1

Ich glaube nicht, dass der C# -Objektinitialisierer diese Syntax unterstützt, Sie können dies jedoch tun. Ich bin mir nicht sicher, ob dies zu zwei Konstruktionen und Zuweisungen an Purchase führen würde, aber Sie könnten den Punkt selbst brechen und sehen.

var model = new ChartData 
       { 
       Purchase = new ItemCountAmount 
           { 
           count = await purchase.CountAsync(x => x.order_date.Month == mnth && x.order_date.Year == yr) 
           } 
       } 
+0

Ich habe separate Abfrage für 'Amount'. Also muss ich es wieder für das wie' neue ItemCountAmount' initialisieren? –

+0

Yup, obwohl Sie vielleicht nur Ihre zweite Methode verwenden möchten, wenn der hier gezeigte Weg zwei Konstruktionen verursacht (was ich ziemlich sicher bin), da es effizienter wäre, also 'model.Purchase.Count = .... .; 'ist wahrscheinlich besser hier. – starlight54

+0

Oh .. In Ordnung .. Vielen Dank @Starlight .. Wird es einen Unterschied in Bezug auf Leistung, Speicher machen, wenn die zweite Methode anstelle der ersten verwendet wird? –

Verwandte Themen