2

这是我想简化的代码:

       public void Method1(Context context, EventLog log = null)
        {
            Class myClass = ConvertToMyClass();
            ApiCall1 apiCall = new ApiCall1(context);
            if (log != null)
            {
                eventLog.WriteEntry("Starting");
            }

            try
            {
                apiCall.Call1(myClass, null, false);
                IsCallSuccess = true;
            }
            catch (Exception e)
            {
                if (log != null)
                {
                    eventLog.WriteEntry("error");
                }

                IsCallSuccess= false;
                CallErrorMessage = e.Message;
            }
        }

        public void Method2(Context context, EventLog log = null)
        {
            Class myClass = ConvertToMyClass();
            ApiCall2 apiCall = new ApiCall2(context);
            if (log != null)
            {
                eventLog.WriteEntry("Starting");
            }

            try
            {
                apiCall.Call1(myClass);
                NewItemID = myClass.ItemID;
                IsCallSuccess = true;
            }
            catch (Exception e)
            {
                if (log != null)
                {
                    eventLog.WriteEntry("error");
                }

                IsCallSuccess= false;
                CallErrorMessage = e.Message;
            }
        }

        public void Method3Context context, EventLog log = null)
        {
            Class myClass = ConvertToMyClass();
            ApiCall3 apiCall = new ApiCall3(context);
            if (log != null)
            {
                eventLog.WriteEntry("Starting");
            }

            try
            {
                apiCall.Call3(myClass, "param1");
                UpdatedItemID = myClass.UpdatedItemID;
                IsCallSuccess = true;
            }
            catch (Exception e)
            {
                if (log != null)
                {
                    eventLog.WriteEntry("error");
                }

                IsCallSuccess= false;
                CallErrorMessage = e.Message;
            }
        }

有3种方法。我一直在考虑如何使用委托或 lambda 简化它们,但没有找到任何东西。

你的意见?

4

1 回答 1

1

两种方式...

1)使方法通用,因为这三个方法只是它们影响的类不同。这可能看起来像这样:

public void Method<T>(Context context, EventLog log = null) where T : BaseAPICall
{
    Class myClass = ConvertToMyClass();
    T apiCall = (T)Activator.CreateInstance(typeof(T), new object[] { context });
    if (log != null)
    {
        eventLog.WriteEntry("Starting");
    }

    try
    {
        apiCall.Call(myClass, null, false);
        IsCallSuccess = true;
    }
    catch (Exception e)
    {
        if (log != null)
        {
            eventLog.WriteEntry("error");
        }

        IsCallSuccess= false;
        CallErrorMessage = e.Message;
    }
}

或者

2)将这些方法放在适当类的父类中,在这种情况下,这将是 ApiCall1/2/3 的父类。这将是:

public class BaseAPICall
{
    public abstract Call(Class c, object o, bool b);

    public virtual Method(Context context, EventLog log = null)
    {
        Class myClass = ConvertToMyClass();
        if (log != null)
        {
            eventLog.WriteEntry("Starting");
        }

        try
        {
            this.Call(myClass, null, false);
            IsCallSuccess = true;
        }
        catch (Exception e)
        {
            if (log != null)
            {
                eventLog.WriteEntry("error");
            }

            IsCallSuccess = false;
            CallErrorMessage = e.Message;
        }
    }
}
于 2012-10-25T06:21:55.553 回答