c# - 如何简化 C# 中的代码?

标签 c# .net

<分区>

这是我想简化的代码:

       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种方法。我一直在考虑如何使用委托(delegate)或 lambda 来简化它们,但没有找到任何东西。

你的想法?

最佳答案

两种方式...

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

关于c# - 如何简化 C# 中的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13062676/

相关文章:

c# - WCF Web 服务方法名称

c# - WCF,ServiceHost - CreateChannel,不创建新的远程实例

.net - 如何更改 MessageBox.Icon

c# - 如何使用 C# 通过 .NET 获取 PC 中的所有驱动器

c# - ML.NET CategoricalOneHotVectorizer 是否也对测试数据进行编码?

c# - 如何检查 Uris 是否相等(不包括查询部分)?

c# - 命名空间是程序集还是项目?

.net - 禁用文本的系统颜色是什么?

c# - Xamarin Forms ListView 复选标记

c# - 如何从 C# 编写汇编代码?