以下顯示 LIST<T>.FindIndex 的使用方法,當代理函式除了原<T> 物件外又需引入參數將是一大麻煩。
第一個程式使用全域變數解決,但是該函式如果被重複呼叫就可能出現錯誤。
public int mDevID;
public int mMsgID;
/* 搜尋 AlarmList,並回傳第一個符合的 Index,否則為 -1 */
public int ExistLog(int devID, int msgID)
{
mDevID = devID;
mMsgID = msgID;
return AlarmList.FindIndex(ProductExistLog);
}
/* AlarmList 搜尋用代理程式 for ExistLog() */
private bool ProductExistLog(NmsLog e)
{
return (e.MsgID == this.mMsgID) && (e.DevID == this.mDevID);
}
以匿名代理函式解決:
public int ExistLog(int devID, int msgID)
{
return AlarmList.FindIndex(
delegate(NmsLog e)
{
return (e.MsgID == devID) && (e.DevID == msgID);
}
);
}
以 Lambda 語法 改寫 匿名代理: 以 e 做為參數 傳遞給 "=>" 符號後面的運算式
public int ExistLogEx(int devID, int msgID)
{
return AlarmList.FindIndex( e => (e.MsgID == devID) && (e.DevID == msgID) );
}
沒有留言:
張貼留言