2016-07-22 8 views
0

Ich möchte einen Float [] von einem IList<float> haben. Zum Beispiel, wenn ichWie kann ich einen Float [] von einem IList mit Xamarin Android haben?

var floats = new[] { 1.0f, 2.0f, 3.5f }; 

Werte ist ein IList<float> und ich möchte schreiben:

floats=(float[]) values; 

Ich habe eine Ausnahme zu sagen, dass diese Besetzung nicht autorisiert ist. Wie kann ich dieses Problem beheben?

+0

Vielleicht [ 'IList.CopyTo'] (https://msdn.microsoft.com/en-us /library/system.collections.ilist(v=vs.110).aspx) ist hilfreich. – Downvoter

+0

Ihre Frage ist etwas unklar, aber ein Array aus einem IList zu erstellen, kann mit: 'list.ToArray()' –

+0

Ist es wirklich 'IList' oder' List'? – Downvoter

Antwort

1

Also, es sei denn, die zugrunde liegende Typ von valuesistfloat[] dann diese Besetzung wird scheitern.

Aus den vorliegenden Beweisen gehe ich davon aus, dass Sie einen anderen konkreten Typ haben, vielleicht List<float>, gespeichert in values.

Obwohl beide Schnittstelle implementieren IList<float>, List<float> ist eine andere Implementierung und erbt nicht von float[]. Die Besetzung schlägt fehl.

Denken Sie über Dinge auf eine natürliche Art und Weise: Sagen Sie, Sie haben IAnimal Schnittstelle und Human und FruitFly Implementierungen. Es macht keinen Sinn, IAnimal human = new Human() zu sagen, dann zu sagen FruitFly b = (FruitFly)human. Das versuchen Sie gerade.

So müssen Sie konvertieren Ihre IList<float> zu einem Array. Sie können dies tun, indem System.Linq:

using System.Linq; //at top of file 

und mit Hilfe der Enumerable.ToArray Erweiterungsmethode:

floats = values.ToArray(); 
1

Ich denke, dass Sie suchen:

var floats = new[] { 1f, 2f, 3f }; 
var list = floats.ToList(); 
var newFloatsArray = list.ToArray<float>();