列表<class>添加字符串</class>

时间:2014-02-21 13:44:06

标签: 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 Vokabel (string dv, string ev)
    {
        this._DV = dv;
        this.EV = ev; 
    }


}

我想将Userchoice添加到Vokabel1。

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); 
        }

这不会运行。我试图分开Userchoice - 不要工作。 感谢您阅读我的问题!

5 个答案:

答案 0 :(得分:1)

您尝试将string Userchoice添加为Vokabel。这是没有意义的。字符串在结构上与Vokabel不同。

考虑一下你想要发生什么。从问题中你不清楚你想要什么。从字符串到Vokabel没有明显的转换。

在任何情况下,您只能将Vokabel个实例添加到列表中。以某种方式从用户输入的字符串中创建这样的实例。

答案 1 :(得分:1)

你是对的它不起作用,我猜它甚至不能编译。

您必须为Vokabel1的构造函数提供两个值,并且必须使用构造函数。

string[] values = Userchoice.Split(':');

Vokabel1.Add(new Vokabel(values[0], values[1])); 

答案 2 :(得分: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)); 
    }

答案 3 :(得分:1)

因此,一个聪明的方法是使用implicit强制转换:

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);
        }
    }
}

在此示例中,如果您使用输入:

A:B
C:D
E:F
...

它会在每个值的:上拆分,并从用户输入中创建一个新的Vokabel。有了这个,你可以很容易地看到它的灵活性。

注意:这是一些间接,因为string投射到Vokabel的方式并不自然,但这是一种方法

请记住,您的代码无效的原因是因为您没有构建List<string>,因此只需添加string而不构建某种代码来将其转换为{ {1}}显然失败了。

答案 4 :(得分:1)

这不起作用的原因是因为您试图在需要对象的位置添加字符串

想象这个

你走近一扇门。门被锁上了。打开门的唯一方法是用巧克力覆盖的蛋糕和布丁。

只要做List.Add(YourString),你就会试图将布丁强行放入锁中,而没有剩余的蛋糕。

你需要做的是这个

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); 
        }

这会创建一个新对象,用布丁填充它并将其放入列表中。得到它?