過程中訪問的基本類型與LINQ我有我自己的小應用程序在http://projecteuler.net落實的問題的解決方案。我有一個名爲ProblemBase
的基類,它包含有關這些問題的元信息,例如它們的id,名稱和說明文本以及求解器函數。然後,每個問題的實現都來自這個類。反射
實現的列表現在變得相當大,所以不是手動維護溶液容器中,我走進了反映土地的第一次。這個想法是在我的程序集中找到從ProblemBase
派生的所有類型,並將它們實例化爲應用程序的問題枚舉(下面的代碼中的),以便我可以從我的GUI與它們交互。這是我目前的實施:
private void FindProblemTypes()
{
var problemBaseType = typeof(ProblemBase);
var problemTypes = (from t in Assembly.GetAssembly(problemBaseType).GetTypes()
where t != problemBaseType && problemBaseType.IsAssignableFrom(t)
select t).ToList();
Problems = new ObservableCollection<ProblemBase>();
foreach (var problemType in problemTypes)
{
Problems.Add((ProblemBase)Activator.CreateInstance(problemType));
}
Problems = new ObservableCollection<ProblemBase>(Problems.OrderBy(t => t.Id));
}
它的工作,但我想清理它了一下。現在,我首先創建一個派生類型的列表,然後將它們安裝到我的集合中,然後創建另一個集合以通過它們的id來排序這些類型。我想要做的是直接從第一個LINQ集合創建我的ObservableCollection。我想只要在LINQ語句添加orderby t.Id
,但由於類型集合包含System.Type
對象而不是ProblemBase
對象,屬性是不可用的,我不能變量轉換爲LINQ查詢在我的基本對象。我假設這是因爲我所請求的類型信息在編譯時並不知道,但有沒有其他方式可以將它看作查詢中的ProblemBase
對象?還是我必須堅持我擁有的?
工作,我忘記了我可以直接從Select語句做東西。我現在直接從查詢返回的列表中創建ObservableCollection。謝謝! :) – 2013-02-23 00:13:37