c# - 我怎样才能在没有重复行的情况下编写代码?

标签 c# .net c#-4.0

<分区>

 Public Class ClassThree
   {
       ClassOne obj = null; //ClassOne:ClassThree
        ClassTwo obj2 = null; //ClassTwo:ClassThree
        public List<Query> GetQueries(string source)
        {
            List<Query> Queries = new List<Query>();
            if (source.Equals("ABCD"))
            {
                 obj = new ClassOne();
                AddQuerie(Queries, obj.GetQuery1());
                AddQuerie(Queries, obj.GetQuery2());
                AddQuerie(Queries, obj.GetQuery3());
                AddQuerie(Queries, obj.GetQuery4());
                AddQuerie(Queries, obj.GetQuery5());
                AddQuerie(Queries, obj.GetQuery6());             
            }
            else
            {
                obj2 = new ClassTwo();
                AddQuerie(Queries, obj2.GetQuery1());
                AddQuerie(Queries, obj2.GetQuery2());
                AddQuerie(Queries, obj2.GetQuery3());
                AddQuerie(Queries, obj2.GetQuery4());
                AddQuerie(Queries, obj2.GetQuery5());
                AddQuerie(Queries, obj2.GetQuery6());               
            }                
            return Queries;
        }
   } 

如何删除 AddQuerie 方法的重复项。是否有可能编写单个方法但它必须访问 ClassOne 或 ClassTwo 的相应对象?

NOTE: ClassOne GetQueryX() is different from ClassTwo GetQueryX()

Methods are totally different from one class to another

最佳答案

方法一:使用界面

public interface IMultiQueryable
{
    string GetQuery1();
    string GetQuery2();
    string GetQuery3();
    string GetQuery4();
    string GetQuery5();
    string GetQuery6();
}

public class ClassOne : IMultiQueryable
{
    public string GetQuery1() => "";
    public string GetQuery2() => "";
    public string GetQuery3() => "";
    public string GetQuery4() => "";
    public string GetQuery5() => "";
    public string GetQuery6() => "";
}

public class ClassTwo : IMultiQueryable
{
    public string GetQuery1() => "";
    public string GetQuery2() => "";
    public string GetQuery3() => "";
    public string GetQuery4() => "";
    public string GetQuery5() => "";
    public string GetQuery6() => "";
}

用法

public class ClassThree
{
    IMultiQueryable obj = null; 
    public List<Query> GetQueries(string source)
    {
        List<Query> Queries = new List<Query>();
        if (source.Equals("ABCD"))
        {
            obj = new ClassOne();          
        }
        else
        {
            obj = new ClassTwo();             
        }   
        
        AddQuerie(Queries, obj.GetQuery1());
        AddQuerie(Queries, obj.GetQuery2());
        AddQuerie(Queries, obj.GetQuery3());
        AddQuerie(Queries, obj.GetQuery4());
        AddQuerie(Queries, obj.GetQuery5());
        AddQuerie(Queries, obj.GetQuery6());               
        return Queries;
    }
}

方法二:使用动态

public class ClassThree
{
    public List<Query> GetQueries(string source)
    {
        List<Query> Queries = new List<Query>();
        dynamic obj = null;
        if (source.Equals("ABCD"))
        {
            obj = new ClassOne();            
        }
        else
        {
            obj = new ClassTwo();            
        }     
            
        AddQuerie(Queries, obj.GetQuery1());
        AddQuerie(Queries, obj.GetQuery2());
        AddQuerie(Queries, obj.GetQuery3());
        AddQuerie(Queries, obj.GetQuery4());
        AddQuerie(Queries, obj.GetQuery5());
        AddQuerie(Queries, obj.GetQuery6());            
        return Queries;
    }
} 

关于c# - 我怎样才能在没有重复行的情况下编写代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63446099/

相关文章:

c# - CaSTLe windsor 添加条件依赖

c# - INotifyPropertyChanged 和自动属性

c# - 如何从代码覆盖中排除属性中的 lambda 函数?

c# - autofac 中的工厂模式

c# - LINQ/C# : Add record isnt working for some reason

c# - Combobox SelectedItem 的不确定响应

c# - 每个请求创建全新的 HttpClient 是否便宜

c# - 如何将 C# 事件处理程序标记为 "handled"?

.net - 如何同时更新两个字典

.net - ServiceStack 遇到异常 : The underlying connection was closed: The message length limit was exceeded