C# 有没有一种方法可以优化添加到具有相同值的列表?

C# 有没有一种方法可以优化添加到具有相同值的列表?,c#,C#,我必须将几个对象添加到包含相同信息的列表中,我想知道如何优化问题。请参阅下面的代码 “GroupNumber”和“IsAvailable”都是一样的 public class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); List<ClassA> listAs = new List<ClassA>();

我必须将几个对象添加到包含相同信息的列表中,我想知道如何优化问题。请参阅下面的代码

“GroupNumber”和“IsAvailable”都是一样的

public class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
        List<ClassA> listAs = new List<ClassA>();
        listAs.Add(new ClassA() {GroupNumber = 1, Name = "PersonA", IsAvailable = true});
        listAs.Add(new ClassA() {GroupNumber = 1, Name = "PersonB", IsAvailable = true});
        listAs.Add(new ClassA() {GroupNumber = 1, Name = "PersonC", IsAvailable = true});
    }
}

public class ClassA
{
  public int GroupNumber {get; set;}
  public string Name {get; set;}
  public bool IsAvailable {get; set;}
}
listAs.Add(new ClassA() {Name = "PersonA"});
listAs.Add(new ClassA() {Name = "PersonA"});
listAs.Add(new ClassA() {Name = "PersonA"});

不需要。但您可以创建一种减少重复量的方法:

static void Main(string[] args)
{
    Console.WriteLine("Hello World!");
    List<ClassA> listAs = new List<ClassA>()
    {
        CreateAvailablePerson("PersonA"),
        CreateAvailablePerson("PersonB"),
        CreateAvailablePerson("PersonC"),
    };
}

private static ClassA CreateAvailablePerson(string name)
{
    return new ClassA() { GroupNumber = 1, Name = name, IsAvailable = true };
}

然后您可以执行
newclassa(){GroupNumber=1,Name=Name}
。当然,您也可以对
GroupNumber
执行此操作,如果其正常值为
1
当然,您可以创建一个带有1个参数的构造函数,并在默认情况下将其他字段设置为所需的某个值

 public ClassA (string name){
      GroupNumber = 100,
      Name = name,
      IsAvailable = true
}

如果您想拥有不同的GroupNumber值,在类内部初始化一个静态变量,并使用某个值,然后在构造函数中递增它。

您可以设置一个默认值

public class ClassA
{
  public int GroupNumber {get; set;} = 1;
  public string Name {get; set;}
  public bool IsAvailable {get; set;} = true;
}

作为其他答案的替代方法,请在构造函数中使用默认参数:

public class ClassA
{
    public int GroupNumber {get; set;}
    public string Name {get; set;}
    public bool IsAvailable {get; set;}

    public ClassA(string name, int groupNumber = 1, bool isAvailable = true)
    {
        Name = name;
        GroupNumber = groupNumber;
        IsAvailable = isAvailable;
    }
}

使用一个名为“factory”的特殊类,如下所示:

using System;
using System.Linq;

namespace Solution
{
    public class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var factory = new ClassAFactory(groupNumber: 1, isAvailable: true);
            var listAs = new[] { "PersonA", "PersonB", "PersonC" }
                               .Select(name => factory.CreateClassA(name))
                               .ToList();
        }
    }

    public class ClassA
    {
        public int GroupNumber { get; set; }
        public string Name { get; set; }
        public bool IsAvailable { get; set; }
    }

    public class ClassAFactory
    {
        private int GroupNumber { get; }
        public bool IsAvailable { get; }

        public ClassAFactory(int groupNumber, bool isAvailable)
        {
            GroupNumber = groupNumber;
            IsAvailable = isAvailable;
        }

        public ClassA CreateClassA(string name)
        {
            return new ClassA { GroupNumber = GroupNumber, Name = name, IsAvailable = IsAvailable };
        }
    }
}

您可以使用循环。它的可能副本将仅用于这2个硬编码值。如果有任何变化,你应该做同样的问题。
public class ClassA
{
    public int GroupNumber {get; set;}
    public string Name {get; set;}
    public bool IsAvailable {get; set;}

    public ClassA(string name, int groupNumber = 1, bool isAvailable = true)
    {
        Name = name;
        GroupNumber = groupNumber;
        IsAvailable = isAvailable;
    }
}
using System;
using System.Linq;

namespace Solution
{
    public class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var factory = new ClassAFactory(groupNumber: 1, isAvailable: true);
            var listAs = new[] { "PersonA", "PersonB", "PersonC" }
                               .Select(name => factory.CreateClassA(name))
                               .ToList();
        }
    }

    public class ClassA
    {
        public int GroupNumber { get; set; }
        public string Name { get; set; }
        public bool IsAvailable { get; set; }
    }

    public class ClassAFactory
    {
        private int GroupNumber { get; }
        public bool IsAvailable { get; }

        public ClassAFactory(int groupNumber, bool isAvailable)
        {
            GroupNumber = groupNumber;
            IsAvailable = isAvailable;
        }

        public ClassA CreateClassA(string name)
        {
            return new ClassA { GroupNumber = GroupNumber, Name = name, IsAvailable = IsAvailable };
        }
    }
}