2013-11-26 125 views
0

我試圖找到答案如何使用委託爲這個例子,但我仍然不知道如何使用它爲我的代碼冗餘。我有這樣的代碼,在我的aplication重複每個dbAction:asp.net將方法的名稱作爲參數傳遞給另一個方法

public bool someDBMethod(params) 
{ 
logDTO ldto = new logDTO("some text"); 
try 
{ 
    if (DALmethod(params)) //DB operation is successfull 
    { 
    Log.insertLog(ldto); //inserrt log to DB 
    return true; 
    } 
    catch (System.Data.SqlClient.SqlException ex) 
    { 
    Log.insertLog(changeLogStatus(ldto, errStatusEnum.ERR_SQL, ex.Message)); 
    throw new Exception (ex.Message); 
    } 
catch (Exception ex) 
{ 
    Log.insertLog(changeLogStatus(ldto, errStatusEnum.ERR, ex.Message)); 
    throw new Exception (ex.Message); 
} 

}

此代碼是除行不同的DB opperations相同

logDTO ldto = new logDTO("some text"); 

if (DALmethod(params)) //DB operation is successfull 

,我創建DAL具體日誌並調用DAL方法來插入/更新/刪除數據庫。這些DAL方法的參數不一樣,但我可以使用一些包裝器。

我想呼籲任何DAL方法

result = someDBMethod(DALmethod m, params p, logDTO l) 

感謝您的幫助

回答

3

你可以傳遞函數求<>作爲參數傳遞給你的方法。

public bool someDBMethod(Func<bool> callDalMethod, string message) 
{ 
logDTO ldto = new logDTO(message); 
try 
{ 
    if (callDallMethod()) //DB operation is successfull 
    { 
    Log.insertLog(ldto); //inserrt log to DB 
    return true; 
    } 
    catch (System.Data.SqlClient.SqlException ex) 
    { 
    Log.insertLog(changeLogStatus(ldto, errStatusEnum.ERR_SQL, ex.Message)); 
    throw new Exception (ex.Message); 
    } 
catch (Exception ex) 
{ 
    Log.insertLog(changeLogStatus(ldto, errStatusEnum.ERR, ex.Message)); 
    throw new Exception (ex.Message); 
} 

調用此方法:

someDBMethod(()=> myDbMethod(參數1,參數2), 「消息文本」);

相關問題