在特定条件下设置私人二传手的随机值

  • 本文关键字:二传手 随机 条件下 设置 c#
  • 更新时间 :
  • 英文 :


我有一个类,其属性具有私有 Setter。这是一个 ID,我希望它仅在对象创建中设置,并且不可修改。 我所做的 - 是通过在类构造函数中指定来设置它:

public class Customer : CustomerBase
    {
     public Customer()
        {
            CustomerId = Utilities.RandomString(6);
        }
        public Customer(string customerId)
        {
            CustomerId = customerId;
        }
        public string CustomerId { get; private set; }
        public string CustomerName { get; set; }
     }
}

此方法适用于创建(并正确保存在 CSV 文件中(。 但这似乎触发了当我从 CSV 文件读取时重新生成此 ID - 因此当我将保存的 ID 与我在检索/读取期间指定的 ID 进行比较时 - 同一条目比较 2 个不同的 ID。

这是我的读取代码:

    public class CustomerRepository
    {
        public Customer Retrieve(string customerId)
        {
            List<Customer> records = null;
            try
            {
                using (StreamReader reader =
                    new StreamReader("DataStoreOut.csv"))
                {
                    using (CsvReader csvReader = new CsvReader(reader))
                    {
                        records = csvReader.GetRecords<Customer>().ToList();
                    }
                }
                var index = records.FindIndex(x => x.CustomerId.ToLowerInvariant() == customerId.ToLowerInvariant());
                return records[index];
            }
            catch (FileNotFoundException ex)
            {
                Console.WriteLine(ex);
                throw;
            }
        }
}

程序类:

class Program
    {
        static void Main(string[] args)
        {
           var customer = new Customer();
           var customerRepository = new CustomerRepository();
           Console.WriteLine("Is it new customer (Y/N): ");
           answer = Console.ReadLine();
           if (answer == "N")
           {
             Console.WriteLine("Pls enter ID: ");
             ID = Console.ReadLine();
             customerRepository.Retrieve(ID);
           }
           else
           {
              customerRepository.Save(customer);
           }
       }
}                

让此 ID 设置一次且不再可修改(除非删除整行(,但同时不会在每次调用时再次重新生成,这有什么更好的方法?

这是因为当你执行csvReader.GetRecords((时,它本质上调用默认构造函数,它总是创建一个新的随机ID。这永远不会正常工作。

因此,从分配随机 ID 的构造函数中删除代码:

public class Customer : CustomerBase
{
 public Customer()
    {
        // SNIP
    }
    public Customer(string customerId)
    {
        CustomerId = customerId;
    }
    public string CustomerId { get; private set; }
    public string CustomerName { get; set; }
 }
}

然后第一次仅从调用代码中分配随机 ID。像这样:

class Program
{
    static void Main(string[] args)
    {
       var customer = null;
       var customerRepository = new CustomerRepository();
       Console.WriteLine("Is it new customer (Y/N): ");
       answer = Console.ReadLine();
       if (answer == "N")
       {
         Console.WriteLine("Pls enter ID: ");
         ID = Console.ReadLine();
         customer = customerRepository.Retrieve(ID);
       }
       else
       {
           customer = new Customer(Utilities.RandomString(6));  // Assign random ID
           customerRepository.Save(customer);
       }
   }
} 

在不知道您使用哪个库来读取 csv 的情况下,我建议您不要在默认构造函数中分配 ID,然后在创建新客户实例时始终传入 ID。默认构造函数可能应该是私有的,尽管 CSV 库可能不支持这一点。

最新更新