-1

我有三个类:ToBeMumNewMumExperiencedMums。这些类有不同的方法,它们做同样的事情,但它们的参数不同。如何重组代码以避免在所有三个类中复制/粘贴?例如:

新妈妈:

public List<Question> GetMotherActualDayCareAge()
        {

            List<QuestionInfo> mumsHabits;
            var answers = Answers.GetAnswers;

            string answerValue = string.Empty;

            var oneA = from a in answers
                       where a.Questionid == "Q49d"
                       select new QuestionInfo { questionId = a.Questionid, userId = a.UserId };

            var oneB = from a in answers
                       where a.Questionid == "Q65d"
                       select new QuestionInfo { questionId = a.Questionid, userId = a.UserId };

            var temp = oneA.Union(oneB).ToList();

            mumsHabits = temp.Intersect(mothers, new UserIdEqualityComparer()).ToList();

            return mumsHabits;
        }

经验丰富的妈妈

public List<QuestionInfo> GetMotherActualDayCareAge()
        {
            List<QuestionInfo> mumsHabits;

            var answers = Answers.GetAnswers;

            string answerValue = string.Empty;

            var oneA = from a in answers
                       where a.Questionid == "Q49c"
                       select new QuestionInfo { questionId = a.Questionid, userId = a.UserId };

            var oneB = from a in answers
                       where a.Questionid == "Q65c"
                       select new QuestionInfo { questionId = a.Questionid, userId = a.UserId };

            var temp = oneA.Union(oneB).ToList();

            mumsHabits = temp.Intersect(mothers, new UserIdEqualityComparer()).ToList();

            return mumsHabits;
        }
4

3 回答 3

1

这将非常简单。您可以在单独的类中编写具有相同概念的通用方法。

例如,创建一个名为 Helper.cs 的类,其中应包含以下方法

public List<QuestionInfo> GetMotherActualDayCareAge(string var1, string var2)
    {
        List<QuestionInfo> mumsHabits;

        var answers = Answers.GetAnswers;

        string answerValue = string.Empty;

        var oneA = from a in answers
                   where a.Questionid == var1
                   select new QuestionInfo { questionId = a.Questionid, userId = a.UserId };

        var oneB = from a in answers
                   where a.Questionid == var2
                   select new QuestionInfo { questionId = a.Questionid, userId = a.UserId };

        var temp = oneA.Union(oneB).ToList();

        mumsHabits = temp.Intersect(mothers, new UserIdEqualityComparer()).ToList();

        return mumsHabits;
    }

现在只要在需要的地方调用这个方法。在您的情况下,您可以从 ToBeMum.cs、NewMum.cs 和 ExperiencedMums.cs 调用此方法。

例如,在 NewMum.cs 中,您可以这样调用。

List<QuestionInfo> quesList = GetMotherActualDayCareAge("Q49d", "Q65d");

在 ExperiencedMum.cs 中,您可以这样调用。

List<QuestionInfo> quesList = GetMotherActualDayCareAge("Q49c", "Q65c");

所以现在这变成了动态的,其中只编写了一个方法,并且该方法被多次调用而无需复制/粘贴。

于 2013-07-04T06:10:25.880 回答
1

这是 user2549110 的第二个问题的答案。

尝试创建一个像 AbsMumSurvey.cs 这样的抽象类,它应该包含以下内容,

public abstract class AbsMumSurvey
{
   public abstract void IsDayCare();

   public abstract void IsEconomicalToEducateChild();

   public int NoOfBabies()
   {
       return 2;

       //This is the sample logic just for understanding. You can write your own logic. 
   }
}

现在 IsDayCare() 和 IsEconomicalToEducateChild() 是应该在派生类中强制重写的抽象方法。

现在在 GoingToDeliver.cs 中,您可以执行以下操作。

public class GoingToDeliver : AbsMumSurvey
{
    public override void IsDayCare()
    {
        //Write your logic here.
    }

    public override void IsEconomicalToEducateChild()
    {
        //Write your logic here.
    }
}

你可能会也可能不会实现 NoOfbabaies()。如果您还想实现 NoOfBabies(),请尝试以下代码。

    public new int NoOfBabies()
    {
        return base.NoOfBabies();
    }

同样,您可以从许多类派生这些方法。

于 2013-07-04T07:27:02.850 回答
0

我会为以下内容提取一个常用方法:

var oneA = from a in answers
                       where a.Questionid == "Q49d"
                       select new QuestionInfo { questionId = a.Questionid, userId = a.UserId };

            var oneB = from a in answers
                       where a.Questionid == "Q65d"
                       select new QuestionInfo { questionId = a.Questionid, userId = a.UserId };

并将 QuestionIds 作为参数传递,而不是在代码中硬编码它们。然后可以从现有方法中调用此新方法并避免重复代码

于 2013-07-04T05:59:06.747 回答