2014-02-21 78 views
-3

這是類:列表<class>添加字符串

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 - 不工作。 謝謝你閱讀我的問題!

+2

你必須創建一個'Vokabel'類型的對象,你不能只添加一個字符串。 –

+0

downvote -why? ) – user3092365

回答

1

你是對的,它不起作用,我猜它甚至不能編譯。

您必須向構造函數Vokabel1提供兩個值,並且必須使用構造函數。

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

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

@ user3092365:我更新了示例以在':'上分割,因此用戶必須輸入一行。 –

+0

@ user3092365:當然你可以用空格或其他任何東西替換':'。 –

+0

是的 - 這是它應該如何工作。謝謝:) – user3092365

1

您試圖添加string Userchoice作爲Vokabel。這是沒有意義的。字符串在結構上與Vokabel不同。

想想你想要發生。從問題中不清楚你想要什麼。從字符串到Vokabel沒有明顯的轉換。

在任何情況下,您只能將Vokabel實例添加到列表中。以某種方式從用戶輸入的字符串中創建這樣一個實例。

+0

「您嘗試將字符串Userchoice添加爲Vokabel,這沒有任何意義。」 - 我知道 。但是我認爲,要了解我的問題會更容易。 「這個問題不清楚你想要什麼。」 - 對不起,我編輯了我的問題。 – user3092365

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

這工作。但我寧願,用戶只需要輸入一行。 – user3092365

+0

對不起,我無法註冊。 – user3092365

+0

@ user3092365:我會說這可以通過投票(我做了),因爲這是一種方法。我提供了一個單一字符串的方法。但是,你不能真的讓斯圖爾特錯誤地認爲這種方法,因爲你的問題從來沒有明確**定義你想要的東西。 –

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無需建立某種形式的代碼翻譯成一個Vokabel顯然失敗。

+0

「聰明」=>不是件好事。 – usr

+0

@usr:不是我不明白你的意思,但它可能是一個非常主觀的評論。 –

1

這不工作的原因是因爲你正試圖增加在那裏它應該對象

認爲它這樣

你接近一個門的字符串。門鎖了。打開門的唯一方法是用巧克力覆蓋的蛋糕和布丁。

通過只做List。添加(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); 
     } 

這將創建一個新的對象,與布丁填充它,並把它放在你的列表中。得到它?

相關問題