C# 列表<;类别>;添加字符串
这是一节课:C# 列表<;类别>;添加字符串,c#,string,list,C#,String,List,这是一节课: public class Vokabel { string DV; string eV; public string _DV { get { return DV;} set { DV = value;} } public string EV { get{return eV;} set{eV = value;} }
public class Vokabel
{
string DV;
string eV;
public string _DV
{
get { return DV;}
set { DV = value;}
}
public string EV
{
get{return eV;}
set{eV = value;}
}
public Vokabel (string dv, string ev)
{
this._DV = dv;
this.EV = ev;
}
}
我想在Vokabel1中添加Userchoice
List<Vokabel> Vokabel1 = new List<Vokabel> ();
for (int i = 0; i< 9; i++) {
Console.WriteLine("Enter a Vokabel["+i+"]:" );
string Userchoice = Console.ReadLine();
Vokabel1.Add(Userchoice);
}
List-Vokabel1=新列表();
对于(int i=0;i<9;i++){
WriteLine(“输入一个Vokabel[“+i+”]:”;
字符串Userchoice=Console.ReadLine();
添加(用户选择);
}
这不会运行。我尝试拆分Userchoice
-不起作用。
谢谢你阅读我的问题 您尝试将
字符串Userchoice
添加为Vokabel
。这毫无意义。字符串在结构上不同于Vokabel
想想你想发生什么。这个问题不清楚你想要什么。没有从字符串到Vokabel
的明显转换
在任何情况下,您只能将
Vokabel
实例添加到列表中。以某种方式从用户输入的字符串创建这样一个实例。您是对的,它不起作用,我想它甚至无法编译
必须向Vokabel1
的构造函数提供两个值,并且必须使用构造函数
string[] values = Userchoice.Split(':');
Vokabel1.Add(new Vokabel(values[0], values[1]));
您需要提示输入每个属性,并将它们用于
Vokabel
类上的构造函数。比如:
for (int i = 0; i< 9; i++) {
Console.WriteLine("Enter a _DV for Vokabel["+i+"]:" );
string dv = Console.ReadLine();
Console.WriteLine("Enter a EV for Vokabel["+i+"]:" );
string ev = Console.ReadLine();
Vokabel1.Add(new Vokabel(dv, ev));
}
for(int i=0;i<9;i++){
Console.WriteLine(“为Vokabel[“+i+”]:”)输入一个_DV;
字符串dv=Console.ReadLine();
Console.WriteLine(“为Vokabel[“+i+”]:”)输入EV;
字符串ev=Console.ReadLine();
添加(新的Vokabel(dv,ev));
}
因此,一个聪明的方法是使用隐式转换:
public class Vokabel
{
string DV;
string eV;
public string _DV
{
get { return DV; }
set { DV = value; }
}
public string EV
{
get { return eV; }
set { eV = value; }
}
public Vokabel(string dv, string ev)
{
this._DV = dv;
this.EV = ev;
}
public static implicit operator Vokabel(string vals)
{
var valsArray = vals.Split(':');
return new Vokabel(valsArray[0], valsArray[1]);
}
}
class Program
{
static void Main(string[] args)
{
List<Vokabel> Vokabel1 = new List<Vokabel>();
for (int i = 0; i < 9; i++)
{
Console.WriteLine("Enter a Vokabel[" + i + "]:");
string Userchoice = Console.ReadLine();
if (string.IsNullOrEmpty(Userchoice))
{
break;
}
Vokabel1.Add(Userchoice);
}
}
}
它将在:
上为每个值拆分,并根据用户输入创建一个新的Vokabel
。有了这些,你可以很容易地看出这是多么灵活
注意:这有点间接,因为字符串
如何强制转换为Vokabel
并不明显,但这是一种方法
请记住,您的代码不起作用的原因是您没有构建列表
,因此只添加字符串
,而不构建某种代码将其转换为Vokabel
显然是失败的。这不起作用的原因是您试图在需要反对
这样想吧
你走近一扇门。门是锁着的。打开门的唯一方法是用一块覆盖着巧克力和布丁的蛋糕
只做清单。加上(你的绳子)你试图在没有蛋糕剩余部分的情况下把布丁塞进锁里
你需要做的是
List<Vokabel> Vokabel1 = new List<Vokabel> ();
for (int i = 0; i< 9; i++) {
Console.WriteLine("Enter a Vokabel["+i+"]:" );
//This is pudding
string Userchoice = Console.ReadLine();
//This is your cake
Vokabel temp = new Vokabel(){ EV = Userchoice }; //I used EV for your userchoice
Vokabel1.Add(temp);
}
List-Vokabel1=新列表();
对于(int i=0;i<9;i++){
WriteLine(“输入一个Vokabel[“+i+”]:”;
//这是布丁
字符串Userchoice=Console.ReadLine();
//这是你的蛋糕
Vokabel temp=new Vokabel(){EV=Userchoice};//我将EV用于您的Userchoice
Vokabel1.添加(温度);
}
这将创建一个新对象,用布丁填充它并将其放入列表中。明白了吗?你必须创建一个类型为Vokabel
的对象,你不能只添加一个字符串。这很有效。但是我更愿意,用户只需要输入一行。对不起,我不能向上投票。@user3092365:我想说这可以向上投票(我也这样做了),因为这是一种方法。我用一个字符串提供了一种方法。但是你不能因为这种方法而责怪斯图尔特,因为你从来没有明确定义过你想要什么。在一行中,你需要解析
或反序列化
用户键入的内容,这也意味着用户知道编码方案是什么(例如,逗号分隔,或@MichaelPerrenoud演示以冒号分隔的编码)。但显然,在这种情况下需要验证和错误处理。@Michael,由于我的声誉,我无法投票。Stuarts的答案简短而准确。@user3092365:我更新了示例,在“:”上拆分,因此用户必须输入一行。@user3092365:当然,您可以用空格或其他任何内容替换:
。是的-th这就是它应该如何工作。谢谢:)“聪明”=>不是一件好事。@usr:我不是不明白你的意思,但这可能是一个非常主观的评论。“你试图添加字符串Userchoice作为一个Vokabel。这没有意义。”-我知道。但我想你更容易理解我的问题。“问题中不清楚您想要什么。”-抱歉,我编辑了我的问题。
List<Vokabel> Vokabel1 = new List<Vokabel> ();
for (int i = 0; i< 9; i++) {
Console.WriteLine("Enter a Vokabel["+i+"]:" );
//This is pudding
string Userchoice = Console.ReadLine();
//This is your cake
Vokabel temp = new Vokabel(){ EV = Userchoice }; //I used EV for your userchoice
Vokabel1.Add(temp);
}