2017-01-20 3 views
0

Wie Sie sehen können, ich versuche, ein Wörterbuch mit einem dynamischen Array von dynamischen Arrays zu initialisieren. Kann mir jemand einen saubereren Weg geben? Es muss einen Weg geben, dies mit einer for-Schleife zu tun.C# Initialize Dictionary enthält dynamische Array von dynamischen Arrays

// Sizes: 20X, 40X, W, M, WM, Other 
sizesDict.Add(eDate, new dynamic[6] { // Date, Size 
    new dynamic[6] { // Data 
     /* RangeMax */ 
     new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total }, 
     /* RangeMin */ 
     new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total }, 
     /* OriginMax */ 
     new List<string> { r.rateEvalDLoc.originLoc.LocationName.ToString() }, 
     /* OriginMin */ 
     new List<string> { r.rateEvalDLoc.originLoc.LocationName.ToString() }, 
     /* DestinationMax */ 
     new List<string> { r.destinationLoc.LocationName.ToString() }, 
     /* DestinationMin */ 
     new List<string> { r.destinationLoc.LocationName.ToString() } 
    }, 
    new dynamic[6] { // Data 
     /* RangeMax */ 
     new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total }, 
     /* RangeMin */ 
     new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total }, 
     /* OriginMax */ 
     new List<string> { r.rateEvalDLoc.originLoc.LocationName.ToString() }, 
     /* OriginMin */ 
     new List<string> { r.rateEvalDLoc.originLoc.LocationName.ToString() }, 
     /* DestinationMax */ 
     new List<string> { r.destinationLoc.LocationName.ToString() }, 
     /* DestinationMin */ 
     new List<string> { r.destinationLoc.LocationName.ToString() } 
    }, 
    new dynamic[6] { // Data 
     /* RangeMax */ 
     new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total }, 
     /* RangeMin */ 
     new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total }, 
     /* OriginMax */ 
     new List<string> { r.rateEvalDLoc.originLoc.LocationName.ToString() }, 
     /* OriginMin */ 
     new List<string> { r.rateEvalDLoc.originLoc.LocationName.ToString() }, 
     /* DestinationMax */ 
     new List<string> { r.destinationLoc.LocationName.ToString() }, 
     /* DestinationMin */ 
     new List<string> { r.destinationLoc.LocationName.ToString() } 
    }, 
    new dynamic[6] { // Data 
     /* RangeMax */ 
     new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total }, 
     /* RangeMin */ 
     new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total }, 
     /* OriginMax */ 
     new List<string> { r.rateEvalDLoc.originLoc.LocationName.ToString() }, 
     /* OriginMin */ 
     new List<string> { r.rateEvalDLoc.originLoc.LocationName.ToString() }, 
     /* DestinationMax */ 
     new List<string> { r.destinationLoc.LocationName.ToString() }, 
     /* DestinationMin */ 
     new List<string> { r.destinationLoc.LocationName.ToString() } 
    }, 
    new dynamic[6] { // Data 
     /* RangeMax */ 
     new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total }, 
     /* RangeMin */ 
     new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total }, 
     /* OriginMax */ 
     new List<string> { r.rateEvalDLoc.originLoc.LocationName.ToString() }, 
     /* OriginMin */ 
     new List<string> { r.rateEvalDLoc.originLoc.LocationName.ToString() }, 
     /* DestinationMax */ 
     new List<string> { r.destinationLoc.LocationName.ToString() }, 
     /* DestinationMin */ 
     new List<string> { r.destinationLoc.LocationName.ToString() } 
    }, 
    new dynamic[6] { // Data 
     /* RangeMax */ 
     new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total }, 
     /* RangeMin */ 
     new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total }, 
     /* OriginMax */ 
     new List<string> { r.rateEvalDLoc.originLoc.LocationName.ToString() }, 
     /* OriginMin */ 
     new List<string> { r.rateEvalDLoc.originLoc.LocationName.ToString() }, 
     /* DestinationMax */ 
     new List<string> { r.destinationLoc.LocationName.ToString() }, 
     /* DestinationMin */ 
     new List<string> { r.destinationLoc.LocationName.ToString() } 
    } 
}); 
+1

Warum verwenden Sie sogar 'dynamic'? Sie könnten dafür starke Typen erstellen und Ihrem Code die Typsicherheit hinzufügen. Außerdem fügen Sie in jedem Array die gleichen Werte 2x hinzu UND jedes Array ist ein exaktes Duplikat des vorherigen (sie sind alle gleich). Schließlich warum verwenden Sie Listen für einzelne Werte, warum nicht einfach 'string' oder' decimal' anstelle von 'List ' und 'List ' '? – Igor

+0

Werden die innersten dynamischen Arrays immer mit den gleichen Werten initialisiert, wie Sie es sehen? – gunnerone

Antwort

2

nicht sicher, warum Sie Dynamik verwenden, aber man könnte es wie folgt tun:

Erstellen Sie eine Funktion eines Ihrer inneren dynamischsten Arrays zu erstellen:

private static dynamic[] GetDataArray(
    decimal rangeMax, 
    decimal rangeMin, 
    string originMax, 
    string originMin, 
    string destMax, 
    string destMin) 
{ 
    return new dynamic[6] { // Data 
     /* RangeMax */ 
     new List<decimal> { rangeMax }, 
     /* RangeMin */ 
     new List<decimal> { rangeMin }, 
     /* OriginMax */ 
     new List<string> { originMax }, 
     /* OriginMin */ 
     new List<string> { originMin }, 
     /* DestinationMax */ 
     new List<string> { destMax }, 
     /* DestinationMin */ 
     new List<string> { destMin } 
    }; 
} 

Dann Rufen Sie diese Funktion sechsmal auf, indem Sie jedes dynamische Array zu Ihrem äußersten dynamischen Array hinzufügen. Und schließlich, fügen Sie dieses Array zu Ihrem Wörterbuch hinzu.

dynamic[] allData = new dynamic[6]; 
for (int i = 0; i < allData.Length; i++) 
{ 
    allData[i] = GetDataArray(
     r.rateEvalDLoc.rateEvalOLoc.charge.Total, 
     r.rateEvalDLoc.rateEvalOLoc.charge.Total, 
     r.rateEvalDLoc.originLoc.LocationName.ToString(), 
     r.rateEvalDLoc.originLoc.LocationName.ToString(), 
     r.destinationLoc.LocationName.ToString(), 
     r.destinationLoc.LocationName.ToString()); 
} 

sizesDict.Add(eDate, allData); 

Wenn RangeMax wird immer zu RangeMin gleich sein, und OriginMax == OriginMin und DestinationMax == DestinationMin könnten Sie die Funktion vereinfachen, um nur drei Argumente haben. Auch wenn alle innersten dynamischen Arrays den gleichen Inhalt haben, können Sie es sogar noch weiter vereinfachen.