user1025901
user1025901

Reputation: 1909

How to make the below code generic?

I have a method as under

 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;
            }

I am invoking it as under

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

As can be figured out that PartnerViewLog is a class. Now I want to make the function SaveRecord as generic where the class name can be anything?

How to do so?

Upvotes: 1

Views: 77

Answers (2)

Falanwe
Falanwe

Reputation: 4744

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

Every thing else remains the same

Upvotes: 1

Rich O&#39;Kelly
Rich O&#39;Kelly

Reputation: 41757

Try the following:

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;
}

Upvotes: 3

Related Questions