我有一個類的屬性:C#索引器和LINQ
public int this[int index]
{
get { return _desk[index]; }
set { _desk[index] = value; }
}
,但我不能Linq中使用這個類。如何做到這一點?
我有一個類的屬性:C#索引器和LINQ
public int this[int index]
{
get { return _desk[index]; }
set { _desk[index] = value; }
}
,但我不能Linq中使用這個類。如何做到這一點?
如果你的類沒有實現IEnumerable<T>,但有一個索引和計數屬性,你可以創建一個IEnumerable使用Enumerable.Range Method指標,並使用Enumerable.Select Extension Method各指標項目的集合項目:
var query = Enumerable.Range(0, obj.Count)
.Select(index => obj[index])
...
+1,這是實現'IEnumerable <..>'(特別是如果這個類不在你的控制之下)的可行替代方案,我不理解downvote。 – Rawling
+1非常好的解決方案!我想人們總是需要「準備使用」的代碼,即使你需要一個玻璃球來猜測他們的意圖...... –
索引器不會自動爲您提供枚舉。爲了能夠調用LINQ方法,你需要在你的類上實現IEnumerable<int>
。
我假設你的_desk
對象是一個簡單的數組 - 如果我在這裏錯了,_desk
是其他類有索引器的東西,你可能需要使該類實現IEnumerable<int>
。
你會那麼需要做這樣的事情:
public class Position : IEnumerable<int>
{
private int[] _desk;
public int this[int index]
{
get { return _desk[index]; }
set { _desk[index] = value; }
}
/* the rest of your class */
public IEnumerator<int> GetEnumerator()
{
return ((IEnumerable<int>)_desk).GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return _desk.GetEnumerator();
}
}
我不知道如果GetEnumerator()
的實現包裝的數組時是最好的做法,但他們應該工作。
請舉例說明你正在嘗試做什麼。你的問題不清楚。 –
你想如何使用它?你是什麼意思「我不能使用這個」?如果索引器是訪問數據的唯一方法,那麼你可以考慮實現IEnumerable –
你是什麼意思「我不能使用這個類」?我們既沒有看到一個班級,也沒有看到你如何使用它。 – Jon