c# - 是否可以将其重构为单一方法

标签 c#

我有一堆看起来像这两个的方法:

   public void SourceInfo_Get()    
   {
        MethodInfo mi = pFBlock.SourceInfo.GetType().GetMethod("SendGet");
        if (mi != null)
        {
            ParameterInfo[] piArr = mi.GetParameters();
            if (piArr.Length == 0)
            {
                mi.Invoke(pFBlock.SourceInfo, new object[0]);
            }
        }
    }
    public void SourceAvailable_Get()
    {
        MethodInfo mi = pFBlock.SourceAvailable.GetType().GetMethod("SendGet");
        if (mi != null)
        {
            ParameterInfo[] piArr = mi.GetParameters();
            if (piArr.Length == 0)
            {
                mi.Invoke(pFBlock.SourceAvailable, new object[0]);
            }
        }
    }

我的 pFBlock 对象中的每个属性都有一个方法。由于方法之间的变化很小,我觉得应该有更好的方法来做到这一点,但我想不出任何方法。 我正在使用 VS 2005。

最佳答案

3种方法怎么样?

public void SourceInfo_Get()    
{
    SendGet(pFBlock.SourceInfo);
}

public void SourceAvailable_Get()
{
    SendGet(pFBlock.SourceAvailable);
}

private void SendGet(Object obj) {
    MethodInfo mi = obj.GetType().GetMethod("SendGet");
    if (mi != null)
    {
        ParameterInfo[] piArr = mi.GetParameters();
        if (piArr.Length == 0)
        {
            mi.Invoke(obj, new object[0]);
        }
    }
}

这里的想法是添加一个辅助方法,您可以将参数传递给该方法。然后,您可以在其他方法中使用辅助方法来大幅缩短代码。

关于c# - 是否可以将其重构为单一方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4246307/

相关文章:

c# - 悬停一秒后消失

c# - C#Array.BinarySearch问题

c# - 如何提取由数字和文本包围的字符串中的特定数字 C#

c# - 在 UWP 应用程序中使用 System.IO?

c# - 如何根据这个 Decode 函数制作一个 Encode 函数?

c# - 为什么我的具有多个参数的 LINQ 表达式无法编译?

c# - 使用 C#.NET 将 MS Word 2007 中的粗体文本替换为 <b>文本</b>

C# - 当前上下文中不存在变量

c# - 更新 jquery 对话框内的 gridview (ASP.net c#)

c# - 将接口(interface)或类的已实现 IEnumerable 声明为已过时