2013-08-31 84 views
-3

我在執行刪除功能時遇到了麻煩,任何幫助將不勝感激。我有一個名爲memberlist的列表,用於存儲人員姓名和號碼。除了刪除功能,我已經可以工作了。任何幫助,將不勝感激。從列表中刪除功能

public class Person 
{ 
    private string name; 
    private string phoneNumber; 

    public string Name 
    { 
     set { name = value; } 
     get { return name; } 
    } 
    public string PhoneNumber 
    { 
     set { phoneNumber = value; } 
     get { return phoneNumber; } 
    } 
    public void PrintInfo() 
    { 
     Console.WriteLine(); 
     Console.WriteLine(" Name: {0}", name); 
     Console.WriteLine(" Phone Number: {0}", phoneNumber); 
     Console.WriteLine(); 
    } 
    public void SaveASCII(ref StreamWriter output) 
    { 

     output.WriteLine(name); 
     output.WriteLine(phoneNumber); 

    } 
    public void LoadASCII(ref StreamReader input) 
    { 

     name = input.ReadLine(); 
     phoneNumber = input.ReadLine(); 

    } 

} 


public class membershipList 
{ 

    public Person[] ML = null; 

    public void AddMember(Person p) 
    { 
     if (ML == null) 
     { 
      ML = new Person[1]; 
      ML[0] = p; 
     } 
     else 
     { 
      Person[] temp = ML; 
      ML = new Person[temp.Length + 1]; 
      for (int i = 0; i < temp.Length; ++i) 
      { 
       ML[i] = new Person(); 
       ML[i] = temp[i]; 
      } 
      ML[temp.Length] = new Person(); 
      ML[temp.Length] = p; 
      temp = null; 

     } 
    } 

    public void DeleteMember(string name) 
    { 

     if (ML == null) 
     { 
      Console.WriteLine(name + " had not been added before."); 
     } 
     else 
     { 
      int memberIndex = ML.MembershipList().FindIndex(p => p.Name == name); 
      if (memberIndex = -1) 
      { 
       Console.WriteLine(name + " had not been added before."); 
       return; 
      } 
      List<Person> tmp = new List<Person>(ML); 
      tmp.RemoveAt(memberIndex); 
      ML = tmp.ToArray(); 
     } 
    } 



    public void PrintAll() 
    { 
     if (ML != null) 
      foreach (Person pers in ML) 
       pers.PrintInfo(); 
     else Console.WriteLine("Then list is empty"); 
    } 
    public void Search(string p) 
    { 
     if (ML != null) 
     { 
      foreach (Person pers in ML) 
      { 
       if (pers.Name.ToLower().CompareTo(p.ToLower()) == 0) 
       { 
        Console.WriteLine("1 Record Found:"); 
        pers.PrintInfo(); 
        break; 
       } 
      } 
      Console.WriteLine("Record not found."); 
     } 
     else Console.WriteLine("Then list is empty."); 
    } 

    public void ReadASCIIFile() 
    { 
     StreamReader input = new StreamReader("memberlist.dat"); ; 

     try 
     { 

      int num = Convert.ToInt32(input.ReadLine()); 
      ML = new Person[num]; 

      for (int i = 0; i < num; ++i) 
      { 
       ML[i] = new Person(); 
       ML[i].LoadASCII(ref input); 

      } 
      input.Close(); 
     } 
     catch (FormatException e) 
     { 
      Console.WriteLine(e.Message); 
      input.Close(); 
     } 


    } 

    public void SaveASCIIFile() 
    { 

     StreamWriter output = new StreamWriter("memberlist.dat"); 

     output.WriteLine(ML.Length); 
     foreach (Person pers in ML) 
     { 
      pers.SaveASCII(ref output); 

     } 
     output.Close(); 


    } 
} 


class Program 
{ 
    static void Main(string[] args) 
    { 

     membershipList ML = new membershipList(); 
     ML.ReadASCIIFile(); 

     string option; 
     do 
     { 

      // Console.Clear(); 
      Console.WriteLine(); 
      Console.WriteLine(); 
      Console.WriteLine("MemberShip List MENU"); 
      Console.WriteLine(); 
      Console.WriteLine("  a. Add"); 
      Console.WriteLine("  b. Seach"); 
      Console.WriteLine("  c. Delete"); 
      Console.WriteLine("  d. Print All"); 
      Console.WriteLine("  e. Exit"); 
      Console.WriteLine(); 
      Console.Write("option: "); 
      option = Console.ReadLine().ToLower(); 

      switch (option) 
      { 
       case "a": 
        Person np = new Person(); 
        Console.Write("Enter Name: "); 
        np.Name = Console.ReadLine(); 
        Console.Write("Enter PhoneNumber: "); 
        np.PhoneNumber = Console.ReadLine(); 
        ML.AddMember(np); 
        break; 
       case "b": 
        Console.Write("Enter Name: "); 
        string name = Console.ReadLine(); 
        ML.Search(name); 
        break; 
       case "c": 
        Console.Write("Enter Name to be Deleted:"); 
        ML.DeleteMember(name); 
        break; 
       case "d": 
        ML.PrintAll(); 

        break; 
       case "e": 
        ML.SaveASCIIFile(); 
        Console.WriteLine("BYE...... "); 
        break; 

       default: 
        Console.WriteLine("Invalid Option"); 
        break; 
      } 


     } while (option.ToLower() != "d"); 
    } 
} 
+2

不工作是非常不具說明性的。刪除方法運行時會發生什麼?一個錯誤?它不刪除?你是否已經在調試器中檢查了代碼,看看發生了什麼? – Tim

+0

獲取此錯誤1> C:\ Users \ Zekk Ragnos \ documents \ visual studio 2012 \ Projects \ MemberShip \ MemberShip \ Program.cs(86,38,86,52):錯誤CS1061:'System.Array'不包含可以找到'MembershipList'的定義,並且沒有找到接受類型'System.Array'的第一個參數的擴展方法'MembershipList'(你是否缺少using指令或程序集引用?) – user2247659

回答

0

顯然,你需要在第一順序指定要刪除它,becouse現在你不看它刪除名稱:

case "c": 
    Console.Write("Enter Name to be Deleted:"); 
    ML.DeleteMember(name); 
break; 

應該是:

case "c": 
    Console.Write("Enter Name to be Deleted:"); 
    string name = Console.ReadLine(); 
    ML.DeleteMember(name); 
break; 
1

您的問題陳述是:

int memberIndex = ML.MembershipList().FindIndex(p => p.Name == name); 

ML是一個不包含名爲MembershipList的成員的數組。

也許這會工作更好?

int memberIndex = Array.FindIndex(ML, p => p.Name == name); 
+0

嘗試過這種方法,但仍然出現錯誤沒有過載FindIndex'方法需要1個參數 – user2247659

+0

'FindIndex'不是擴展方法,嘗試'Array.FindIndex(ML,p => p.Name == name)' –

+0

現在我得到這個最後的錯誤不能隱式轉換類型'int 'to'bool' – user2247659