【问题标题】:C# automating initializing variables?C# 自动初始化变量?
【发布时间】:2020-09-03 04:37:51
【问题描述】:

问题:有没有办法自动初始化变量,或者创建一个包含多个值的字典? (我使用的是 Windows 窗体)

CONTEXT:我正在创建一个带有基本 UI 的程序,用于输入教科书租赁信息。我的计划是创建一个具有以下属性的“教科书”对象:

    private String name;
    private String store;
    private String format;
    private String website;

    private Double price;

    private int timeSpan;  //in days
    private int startTime; //yyyymmdd
    private int endTime;   //yyyymmdd

我的程序将比较用户输入的多本教科书。

DILEMMA:我不知道用户一开始要创建多少“教科书”对象。我希望他们能够随时添加尽可能多的内容。我要创建一个对象,我需要给它命名。例如,

Textbook name = new Textbook();

我不知道如何为这个对象分配一个名称。我想创建一个字典,因为键可以是用户输入的字符串,但是会有多个值,并且它们的类型会有所不同(一些 String、一些 int 和一个 Double),所以是 Array 或 List不会工作。

有谁知道如何做到这一点,或者有解决这个问题的替代方案?

非常感谢任何帮助! :)

【问题讨论】:

标签: c# dictionary variables initialization


【解决方案1】:

您通常会创建对象的模型。在这种情况下:

 public sealed class Textbook
 {
    public string Name {get;set;}
    public string Store {get;set;}
    public string Format {get;set;}
    public string Website {get;set;}

    public double Price {get;set;}

    public TimeSpan TimeSpan {get;set;}  //in days
    public DateTime StartTime {get;set;} //yyyymmdd
    public DateTime EndTime {get;set;}   //yyyymmdd
}

我不知道您的表单是如何设置的,但看起来它可能设置了几个文本框。在这种情况下,要实例化模型,您可以这样做(例如,在按钮单击中):

private readonly List<Textbook> _lstTextbooks = new List<Textbook>();

void OnAddTextbookButtonClicked(object sender, EventArgs args)
{
    var textbook = new Textbook
    {
        name = txtName.Text,
        store = txtStore.Text,
        format = txtFormat.Text,
        website = txtWebsite.Text,
        price = double.Parse(txtPrice.Text),
        // ...
    }
    
    _lstTextbooks.Add(textbook);
}

此时,您有一个教科书对象列表。您如何处理该列表取决于您。

【讨论】:

  • public double Price {get;set;} - 不不! stackoverflow.com/a/3730040/982149
  • “我不知道如何为这个对象命名。” - 我认为 OP 的问题在于查找其中一本教科书从稍后的列表中。 OP:看,教科书已经拥有 Name 属性。所以稍后,您可以过滤列表,例如使用 Linq _lstTextbooks.Where( x =&gt; x.Name == "Some name") ...
猜你喜欢
  • 2013-05-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
相关资源
最近更新 更多