我已經訂閱了一些方法,一個事件,並希望通過特定的順序,我給他們,像這樣調用它們:調用順序由特定的屬性
foreach (var method in LOAD_DEPENDENCIES.GetInvocationList()
.OrderBy(x => x.Method.GetCustomAttributes(typeof(InvocationOrderAttribute),false)))
{
method.DynamicInvoke(localStats, this);
}
其中(當然)事件是LOAD_DEPENDENCIES
和屬性是InvocationOrderAttibute
。 注意即foreach
的身體工作,參數DynamicInvoke
不是問題。
該屬性看起來像這樣:
public class InvocationOrderAttribute : Attribute , IComparable
{
public int order;
public InvocationOrderAttribute(int order)
{
this.order = order;
}
public int CompareTo(object obj)
{
return this.order.CompareTo((obj as InvocationOrderAttribute).order);
}
}
我實現了IComparable
希望OrderBy
將用它來確定順序。
這是行不通的,通過調試我檢查到我從來沒有進入該循環體的那個foreach
循環。 ALL訂閱的方法具有該屬性。
問題是,我在做什麼錯在foreach
循環的LINQ查詢或屬性?
編輯:
它不是最好的,但工作原理:
foreach (var method in LOAD_DEPENDENCIES.GetInvocationList()
.OrderBy(y => y.Method.GetCustomAttributes(false)
.OfType<InvocationOrderAttribute>().FirstOrDefault().order))
{
method.DynamicInvoke(localStats, this);
}
謝謝您的回答。 我使用這個Unity和版本C#4,我沒有'GetCustomAttribute <>'(可能不是因爲版本,但我沒有)。在這種情況下可以採取什麼解決方法? – agiro
'.GetCustomAttributes()。OfType()。FirstOrDefault()'是等效的 –
tinudu
沒有運氣:/仍然沒有做我想做的事。 – agiro