【问题标题】:Best practice to compare Object properties in C# Lottery Ticket在 C# Lottery Ticket 中比较对象属性的最佳实践
【发布时间】:2015-11-10 14:35:04
【问题描述】:

我正在尝试用 C# 构建一个乐透票验证器。该程序将允许用户生成包含多个机会的彩票。每个机会将包含 6 个数字。 5 个常规数字和 1 个幂数字。然后用户输入抽奖号码,这些号码与彩票上的每个机会进行比较。

对此进行建模和比较的最佳方法是什么?

作为测试,我已经能够使用两个模型的 string[] 数组表示并遍历它们。但是正如您在下面的代码中看到的那样,它只告诉我所有匹配的数量..我需要一种方法来遍历自定义对象并计算每次机会中有多少匹配项。此外,如果功率数匹配,我需要一种方法使它成为奖励。最后这将是一个 Web 应用程序,所以在我看来,门票将显示在表格中。我如何通知应该突出显示哪个数字(即匹配)?只是逻辑,我可以处理其余的..

我从来没有使用过反射,所以也许这就是答案,但我看到的唯一例子是比较相同类型的对象并且不在集合中..

请帮忙..谢谢..

我的测试代码

int matches = 0;

        List<string[]> numbas = new List<string[]>();

        string[] numbers = new string[] { "55", "10", "12", "42" };
        string[] numbers1 = new string[] { "62", "45", "84", "23" };
        string[] numbers2 = new string[] { "2", "23", "45", "43" };
        string[] numbers3 = new string[] { "4", "45", "4", "43" };
        string[] numbers4 = new string[] { "86", "33", "67", "51" };


        numbas.Add(numbers);
        numbas.Add(numbers1);
        numbas.Add(numbers2);
        numbas.Add(numbers3);
        numbas.Add(numbers4);

        string[] drawn = new string[] { "51", "10", "33" };



        for (int rows = 0; rows <= numbas.Count-1; rows++)
        {
            for (int drawNum = 0; drawNum <= drawn.Length-1; drawNum++)
            {
                for (int tickNo = 0; tickNo <= numbas[rows].Length-1; tickNo++)
                {
                    Console.WriteLine("Drawn Number {0} being comparted to number {1}", drawn[drawNum], numbas[rows].ElementAt(tickNo));
                    if (drawn[drawNum] == numbas[rows].ElementAt(tickNo))
                    {
                        matches++;
                    }
                }


            }

        }

        Console.WriteLine("There were " + matches + " matches.");
        Console.ReadLine();

这是我目前实际程序的内容。

我的模型

    public class Ticket
{
    public int TicketID { get; set; }
    public string TicketName { get; set; }
    public DateTime DrawDate { get; set; }

    public virtual ICollection<Chance> Chances { get; set; }
    public virtual DrawnNumber DrawnNumber { get; set; }

}


public class Chance
{
    public int RowID { get; set; }
    public int TicketID { get; set; }

    public string Number1 { get; set; }
    public string Number2 { get; set; }
    public string Number3 { get; set; }
    public string Number4 { get; set; }
    public string Number5 { get; set; }

    public string PowerNumber { get; set; }


}

public class DrawnNumber
{
    public int DrawnNumberID { get; set; }
    public int TicketID { get; set; }

    public string DrawnNumber1 { get; set; }
    public string DrawnNumber2 { get; set; }
    public string DrawnNumber3 { get; set; }
    public string DrawnNumber4 { get; set; }
    public string DrawnNumber5 { get; set; }

    public string DrawnPowerNumber { get; set; }

}

【问题讨论】:

标签: c# asp.net-mvc model-view-controller


【解决方案1】:

在仔细考虑场景后,我发现最好为每个乐透号码创建更复杂的对象。这样,它将为我提供每个数字的功能(即,如果选择了数字,则设置为 true)

代替:

public int Number1

做:

Class Number 

{
   int value;
   bool isTrue;

}

class Number1 : Number 

{

}

还让我的 Chance 类是包含乐透号码的字段,从 IEnumberable 派生,以便实现 GetEnumerator 方法来迭代所有字段..(检查中奖号码)

喜欢:

 public class Chance : IEnumerable
        {
            public string chanceNumber;
            public FirstNumber FirstNumber;
            public SecondNumber SecondNumber;
            public ThirdNumber ThirdNumber;
            public FourthNumber FourthNumber;
            public FifthNumber FifthNumber;
            public PowerNumber PowerNumber;
            public Number[] numbers;

            public Chance()
            {
            }


            public IEnumerator GetEnumerator()
            {
                numbers = new Number[] { FirstNumber, SecondNumber, ThirdNumber, FourthNumber, FifthNumber, PowerNumber};      
                return new NumberEnumerator(numbers);
            }
}

像魅力一样工作! 谢谢

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    相关资源
    最近更新 更多