比较C#彩票中对象属性的最佳实践

本文关键字:最佳 属性 对象 彩票 比较 | 更新日期: 2023-09-27 18:21:32

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

建立模型并进行比较的最佳方法是什么?

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

我从未使用过反射,所以也许这就是答案,但我看到的唯一例子是比较同一类型的对象和不在集合中的对象。。

请帮忙。。谢谢

我的测试代码

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#彩票中对象属性的最佳实践

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

代替:

public int Number1

Do:

class Number 
{
   int value;
   bool isTrue;
}
class Number1 : Number 
{
}

还让我的Chance类(包含乐透号码的字段)从IEnumerable派生,以便实现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);
    }
}

工作起来很有魅力!

感谢