C#中如何从用户输入向可变大小列表添加对象?
解决CS1729错误并实现产品添加功能
错误原因
CS1729是因为你定义的Produit类没有接受单个字符串参数的构造函数,你试图用new Produit(NomProduits)这种方式创建实例,但Produit默认只有编译器自动生成的无参构造,所以会报错。另外你的逻辑存在问题:一个产品包含名称、编码、价格三个属性,不该把每个属性单独创建成Produit对象添加到列表,而是要创建一个完整的Produit实例一次性添加。
修正步骤及代码
1. 完善Produit类(可选,添加构造函数更便捷)
给Produit添加带参数的构造函数,方便快速创建完整实例:
public class Produit { public string? NomProduits { get; set; } public string? CodeProduits { get; set; } public string? PrixProduits { get; set; } // 带参数的构造函数 public Produit(string? nom, string? code, string? prix) { NomProduits = nom; CodeProduits = code; PrixProduits = prix; } // 保留无参构造(如需使用对象初始化器) public Produit() { } }
2. 修复属性读取方法
你当前的AjouterProduits方法仅定义了内部读取逻辑但未调用,也未与列表交互。修改成可读取用户输入并返回完整产品实例的方法:
public class AttributsProduits { // 读取用户输入,返回完整的Produit实例 public static Produit LireProduitDepuisEntree() { Console.WriteLine("请输入产品名称:"); string? nom = Console.ReadLine(); Console.WriteLine("请输入产品编码:"); string? code = Console.ReadLine(); Console.WriteLine("请输入产品价格:"); string? prix = Console.ReadLine(); // 使用带参数构造函数创建实例 return new Produit(nom, code, prix); // 若不用带参构造,可改用对象初始化器: // return new Produit() // { // NomProduits = nom, // CodeProduits = code, // PrixProduits = prix // }; } }
3. 正确向列表添加产品
在主逻辑中调用方法,创建完整产品实例并添加到列表:
// 初始化产品列表 List<Produit> produits = new List<Produit>(); // 读取用户输入的产品并添加到列表 Produit nouveauProduit = AttributsProduits.LireProduitDepuisEntree(); produits.Add(nouveauProduit); // 验证:输出列表中的产品信息 foreach (var prod in produits) { Console.WriteLine($"名称:{prod.NomProduits},编码:{prod.CodeProduits},价格:{prod.PrixProduits}"); }
关键注意点
- 单个
Produit实例对应一个完整产品,包含三个属性,不要拆分添加。 - 若不想添加带参数构造函数,就用
new Produit() { ... }的对象初始化器方式创建实例,不要给无参构造传参数。 - 读取输入时添加提示信息,避免用户混淆输入内容。
内容的提问来源于stack exchange,提问作者Sidepie
相关产品推荐
相关产品推荐

