2016-07-22 28 views
0

我想從一個IList<float>有一個float []。舉例來說,如果我有如何使用xamarin android從IList <float>獲取float []?

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

值是IList<float>,我想寫:

floats=(float[]) values; 

我有一個例外,說這個投沒有被授權。我該如何解決這個問題?

+0

也許['IList.CopyTo'](https://msdn.microsoft.com/en-us /library/system.collections.ilist(v=vs.110).aspx)很有幫助。 – Downvoter

+0

你的問題有點不清楚,但是從IList創建一個數組可以使用:'list.ToArray()' –

+0

它真的是'IList'還是'List'? – Downvoter

回答

1

所以,除非基礎類型的valuesfloat[]那麼這個投將失敗。

從呈現的證據中,我假設您有其他具體類型,或許List<float>存儲在values

即使兩者都實現接口IList<float>,List<float>是不同的實現並且不從float[]繼承。演員陣容失敗。

以更自然的方式思考事物:假設您有IAnimal接口,以及HumanFruitFly實現。說IAnimal human = new Human(),然後說FruitFly b = (FruitFly)human沒有意義。這是你目前正在嘗試做的事情。

因此,您需要將轉換爲您的IList<float>爲一個數組。您可以通過System.Linq做到這一點:

using System.Linq; //at top of file 

,並使用Enumerable.ToArray擴展方法:

floats = values.ToArray(); 
1

我認爲你正在尋找:

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