2012-01-17 7 views
1

PartnerViewLogがクラスであることを把握することができるとして、私は以下のコードを一般的にするには?

public int SavePartnerViewLog(PartnerViewLog partnerViewLog, PortalConstant.DataSourceType DataSourceType) 
     { 
      return SaveRecord(partnerViewLog, DataSourceType, (i, u) => i.SavePartnerViewLog(partnerViewLog)); 
     } 

下のようにそれを呼び出すのです

private int SaveRecord(PartnerViewLog partnerViewLog, PortalConstant.DataSourceType DataSourceType, Func<IDataAccess, PartnerViewLog, int> chooseSelector) 
      { 
       int results = -1; 

       var dataPlugin = DataPlugins.FirstOrDefault(i => i.Metadata["SQLMetaData"].ToString() == DataSourceType.EnumToString()); 

       if (dataPlugin != null) 
       { 
        results = chooseSelector(dataPlugin.Value, partnerViewLog); 
       } 
       return results; 
      } 

下のように私には方法があります。今、クラス名が何でもかまいませんが、SaveRecord関数を汎用として作成したいのですか?

どうすればよいですか?

答えて

3

は、以下のことを試してみてください。

private int SaveRecord<T>(T record, PortalConstant.DataSourceType dataSourceType, Func<IDataAccess, T, int> chooseSelector) 
{ 
    int results = -1; 

    var dataPlugin = DataPlugins.FirstOrDefault(i => i.Metadata["SQLMetaData"].ToString() == dataSourceType.EnumToString()); 

    if (dataPlugin != null) 
    { 
     results = chooseSelector(dataPlugin.Value, record); 
    } 

    return results; 
} 
1
private int SaveRecord<T>(T partnerViewLog, PortalConstant.DataSourceType dataSourceType, Func<IDataAccess, T, int> chooseSelector) 
{ 
    ... 
} 

他のすべてのものが同じ

まま
関連する問題