Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: IComparable IComparer lỗi này là sao trời

  1. #1
    Ngày gia nhập
    03 2009
    Bài viết
    149

    Thumbs up IComparable IComparer lỗi này là sao trời

    bác nào sửa giùm em cái:
    nó báo lỗi như này:
    Error 1 The best overloaded method match for 'System.Collections.Generic.List<anphamminh.anpham >.Sort(System.Collections.Generic.IComparer<anpham minh.anpham>)' has some invalid arguments F:\docurments\baitap\anphamminh\anphamminh\Program .cs 215 17 anphamminh

    Error 2 Argument '1': cannot convert from 'anphamminh.anpham.emsort' to 'System.Collections.Generic.IComparer<anphamminh.a npham>' F:\docurments\baitap\anphamminh\anphamminh\Program .cs 215 25 anphamminh
    PHP Code:
                public void sort1()
                {
                    
    anpham.emsort c anpham.moi();
                    
    c.gi anpham.emsort.ComparisonType.Gia;
                    
    ls.Sort(c);
                } 


    code bài làm đây

    Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    
    namespace anphamminh
    {
        class anpham : IComparable
        {
            private string tde;
            public string TuaDe
            {
                get { return tde; }
                set { tde = value; }
            }
            private int gia;
            public int Gia
            {
                get { return gia; }
                set { gia = value; }
            }
            private string nhasx;
            public string NhaSX
            {
                get { return nhasx; }
                set { nhasx = value; }
            }
            public anpham(string TD, int G, string NSX)
            {
                tde = TD; gia = G; nhasx = NSX;
            }
            public virtual string ID()
            {
                return "AP";
            }
            public virtual string xuat()
            {
                return "Tua de :" + TuaDe.PadRight(12, ' ') + "Gia :" + Gia.ToString().PadRight(7, ' ') + " Nha sx : " + NhaSX.PadRight(10, ' ');
            }
            public static emsort moi()
            {
                return new anpham.emsort();
            }
            public int CompareTo(object apham2)
            {
                anpham a = (anpham)apham2;
                return TuaDe.CompareTo(a.TuaDe);
            }
            public int CompareTo(anpham r, emsort.ComparisonType gi)
            {
                switch (gi)
                {
                    case emsort.ComparisonType.TuaDe:
                        return TuaDe.CompareTo(r.TuaDe);
                    case emsort.ComparisonType.Gia:
                        return Gia.CompareTo(r.Gia);
                    default: return 0;
                }
            }
            public class emsort : System.Collections.IComparer
            {
                ComparisonType temp;
                public enum ComparisonType
                {
                    TuaDe, Gia
                }
                public int Compare(object lap, object rap)
                {
                    anpham l = (anpham)lap;
                    anpham r = (anpham)rap;
                    return l.CompareTo(r, temp);
                }
                public ComparisonType gi
                {
                    get { return temp; }
                    set { temp = value; }
                }
            }
            class sach : anpham
            {
                private string tga;
    
                public string TacGia
                {
                    get { return tga; }
                    set { tga = value; }
                }
                public sach(string TD, int G, string NSX, string TG)
                    : base(TD, G, NSX)
                {
                    tga = TG;
                }
                public override string ID()
                {
                    return "S";
                }
                public override string xuat()
                {
                    return base.xuat() + "Tac Gia :" + TacGia.PadRight(10, ' ');
                }
    
            }
            class cd : anpham
            {
                public cd(string TD, int G, string NSX)
                    : base(TD, G, NSX)
                { }
                public override string ID()
                {
                    return "C";
                }
            }
            class cuahang
            {
                List<anpham> ls;
                public cuahang()
                {
                    ls = new List<anpham>();
                }
                public void nhap()
                {
                menu:
                    int chose;
                    Console.WriteLine("\n......................................................................");
                    Console.WriteLine("");
                    Console.WriteLine("            1       nhap them sach   ");
                    Console.WriteLine("            2       nhap them CD     ");
                    Console.WriteLine("            0       khong them gi nua");
                    Console.WriteLine("");
                    Console.WriteLine("......................................................................\n");
                    try
                    {
                        Console.Write("nhap vao mot so trong menu :\t");
                        chose = int.Parse(Console.ReadLine());
                        if (chose < 0 || chose > 2)
                            Console.WriteLine("\n\n\nLam on");
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("\n\n\nLam on");
                        goto menu;
                    }
                    while (chose > 0)
                    {
                        if (chose == 1)
                        {
                            //nhap vao sach
                            Console.Write("nhap vao tua de:\t");
                            string td = Console.ReadLine();
                        gia:
                            try
                            {
                                Console.Write("nhap vao gia:\t");
                                int gia = int.Parse(Console.ReadLine());
                                Console.Write("nhap vao nha san xuat:\t");
                                string nsx = Console.ReadLine();
                                Console.Write("nhap vao tac gia :\t");
                                string tg = Console.ReadLine();
                                ls.Add(new sach(td, gia, nsx, tg));
                            }
                            catch (Exception)
                            {
                                Console.WriteLine("\n\n\nlam on nhap vao so nguyen");
                                goto gia;
                            }
                        }
                        else if (chose == 2)
                        {
                            //nhap vao sach
                            Console.Write("nhap vao tua de:\t");
                            string tdc = Console.ReadLine();
                        gia:
                            try
                            {
                                Console.Write("nhap vao gia:\t");
                                int giac = int.Parse(Console.ReadLine());
                                Console.Write("nhap vao nha san xuat:\t");
                                string nsxc = Console.ReadLine();
                                ls.Add(new cd(tdc, giac, nsxc));
                            }
                            catch (Exception)
                            {
                                Console.WriteLine("\n\n\nlam on nhap vao so nguyen");
                                goto gia;
                            }
    
    
                        }
                        goto menu;
                    }
    
    
    
                }
                public void xuat()
                {
                    for (int i = 0; i < ls.Count; i++)
                    {
                        if (ls[i].ID() == "S")
                            Console.WriteLine("(SACH) " + ls[i].xuat());
                        if (ls[i].ID() == "C")
                            Console.WriteLine("(CD)   " + ls[i].xuat());
    
                    }
                }
                public void sort()
                {
                    ls.Sort();
                }
    
                public void sort1()
                {
                    anpham.emsort c = anpham.moi();
                    c.gi = anpham.emsort.ComparisonType.Gia;
                    ls.Sort(c);
                }
            }
    
            class Program
            {
                static void Main(string[] args)
                {
                    cuahang ch = new cuahang();
                menu:
                    Console.WriteLine("\n\n\n.......................................................................");
                    Console.WriteLine("");
                    Console.WriteLine("                 1 nhap                        ");
                    Console.WriteLine("                 2 xuat                        ");
                    Console.WriteLine("                 3 sap xep theo                ");
                    Console.WriteLine("                 0 thoat                ");
                    Console.WriteLine("");
                    Console.WriteLine(".......................................................................");
                    int chose;
                    try
                    {
                        Console.Write("chon mot so trong menu:\t");
                        chose = int.Parse(Console.ReadLine());
                        if (chose < 0 || chose > 3)
                        {
                            Console.WriteLine("\n\nLAM ON");
                            goto menu;
                        }
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("\n\nLAM ON");
                        goto menu;
                    }
                    switch (chose)
                    {
                        case 0: break;
                        case 1:
                            ch.nhap();
                            goto menu;
    
                        case 2:
                            ch.xuat();
                            break;
                        case 3:
                            ch.sort1();
                            ch.xuat();
                            break;
                        default: goto menu;
                    }
                    if (chose > 0)
                    {
                    menu1:
                        Console.WriteLine(".............................................................");
                        Console.WriteLine("");
                        Console.WriteLine("           1 - goto menu");
                        Console.WriteLine("           0 - thoat");
                        Console.WriteLine("");
                        Console.WriteLine(".............................................................");
                        int chose1;
                        try
                        {
                            Console.Write("chon mot so trong menu:\t");
                            chose1 = int.Parse(Console.ReadLine());
                            if (chose1 < 0 || chose1 > 1)
                            {
                                Console.WriteLine("\n\nLAM ON");
                                goto menu1;
                            }
                        }
                        catch (Exception)
                        {
                            Console.WriteLine("\n\nLAM ON");
                            goto menu1;
                        }
                        while (chose1 > 0)
                        {
                            switch (chose)
                            {
                                case 0: break;
                                   default: goto menu;
                               
                            }
                        }
                    }
    
    
    
                }
            }
        }
    }
    Đã được chỉnh sửa lần cuối bởi angeltrongminh : 21-04-2009 lúc 07:41 AM.

  2. #2
    Ngày gia nhập
    03 2009
    Bài viết
    149

    chưa có ai trả lời giùm minh sao. bùn wa anh em giúp minh với

  3. #3
    Ngày gia nhập
    04 2009
    Bài viết
    6

    bạn implement chưa dung bạn sửa code như sau :
    PHP Code:
    public class emsort System.Collections.Generic.IComparer<anpham>
            {
                
    ComparisonType temp;
                public 
    enum ComparisonType
                
    {
                    
    TuaDeGia
                
    }
                public 
    int Compare(anpham lapanpham rap)
                {
                    
                    return 
    lap.CompareTo(raptemp);
                }
                public 
    ComparisonType gi
                
    {
                    
    get { return temp; }
                    
    set temp value; }
                }
            } 

  4. #4
    Ngày gia nhập
    03 2009
    Bài viết
    149

    thank bạn nhiều lắm. mình ra rồi nhưng mình hỏi từ hôm qua. sáng nay minh lam cách khác là dùng Arraylist thì nó không báo lỗi gì cả.bạn có thể giải thích giúm mình được không, nhân đây cho mình hỏi khi nao dùng IComparer
    khi nào dùng IComparable được không.



    code mình làm trên Arraylist đây:

    PHP Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;

    namespace 
    anphamminh
    {
        class 
    anpham IComparable
        
    {
            private 
    string tde;
            public 
    string TuaDe
            
    {
                
    get { return tde; }
                
    set tde value; }
            }
            private 
    int gia;
            public 
    int Gia
            
    {
                
    get { return gia; }
                
    set gia value; }
            }
            private 
    string nhasx;
            public 
    string NhaSX
            
    {
                
    get { return nhasx; }
                
    set nhasx value; }
            }
            public 
    anpham(string TDint Gstring NSX)
            {
                
    tde TDgia Gnhasx NSX;
            }
            
    string id;
            public 
    virtual string ID
            
    {
                
    get { return id "AP"; }
             }

            public 
    override string ToString()
            {
               return 
    "Tua de :" TuaDe.PadRight(12' ') + "Gia :" Gia.ToString().PadRight(7' ') + " Nha sx : " NhaSX.PadRight(10' ');
            }
                    
            public static 
    emsort moi()
            {
                return new 
    anpham.emsort();
            }
            public 
    int CompareTo(object apham2)
            {
                
    anpham a = (anpham)apham2;
                return 
    ID.CompareTo(a.ID);
            }
            public 
    int CompareTo(anpham remsort.ComparisonType gi)
            {
                switch (
    gi)
                {
                    case 
    emsort.ComparisonType.ID:
                      return  
    ID.CompareTo(r.ID);
                  case 
    emsort.ComparisonType.TuaDeCungLoai:
                      return 
    TuaDe.CompareTo(r.TuaDe);
                    case 
    emsort.ComparisonType.Gia:
                        return 
    Gia.CompareTo(r.Gia);
                    default: return 
    0;
                }
            }
            public class 
    emsort System.Collections.IComparer
            
    {
                
    ComparisonType temp;
                public 
    enum ComparisonType
                
    {
                    
    TuaDeCungLoaiGia,ID
                
    }
                public 
    int Compare(object lapobject rap)
                {
                    
    anpham l = (anpham)lap;
                    
    anpham r = (anpham)rap;
                    return 
    l.CompareTo(rtemp);
                }
                public 
    ComparisonType gi
                
    {
                    
    get { return temp; }
                    
    set temp value; }
                }
            }
            class 
    sach anpham
            
    {
                private 
    string tga;

                public 
    string TacGia
                
    {
                    
    get { return tga; }
                    
    set tga value; }
                }
                public 
    sach(string TDint Gstring NSXstring TG)
                    : 
    base(TDGNSX)
                {
                    
    tga TG;
                }
                public 
    override string ID
                
    {
                    
    get{return id "AS";}
                }

                public 
    override string ToString()
                {
                    return 
    base.ToString()+ "Tac Gia :" TacGia.PadRight(10' ');;
                }

            }
            class 
    cd anpham
            
    {
                public 
    cd(string TDint Gstring NSX)
                    : 
    base(TDGNSX)
                { }
      
                 public 
    override string ID
                
    {
                   
    get{ return id "C";}
                }
     
        
            }
            class 
    cuahang
            
    {
                
    ArrayList ls = new ArrayList();
                public 
    void nhap()
                {
                
    menu:
                    
    int chose;
                    
    Console.WriteLine("\n......................................................................");
                    
    Console.WriteLine("");
                    
    Console.WriteLine("            1       nhap them sach   ");
                    
    Console.WriteLine("            2       nhap them CD     ");
                    
    Console.WriteLine("            0       khong them gi nua");
                    
    Console.WriteLine("");
                    
    Console.WriteLine("......................................................................\n");
                    try
                    {
                        
    Console.Write("nhap vao mot so trong menu :\t");
                        
    chose int.Parse(Console.ReadLine());
                        if (
    chose || chose 2)
                            
    Console.WriteLine("\n\n\nLam on");
                    }
                    catch (
    Exception)
                    {
                        
    Console.WriteLine("\n\n\nLam on");
                        goto 
    menu;
                    }
                    while (
    chose 0)
                    {
                        if (
    chose == 1)
                        {
                            
    //nhap vao sach
                            
    Console.Write("nhap vao tua de:\t");
                            
    string td Console.ReadLine();
                        
    gia:
                            try
                            {
                                
    Console.Write("nhap vao gia:\t");
                                
    int gia int.Parse(Console.ReadLine());
                                
    Console.Write("nhap vao nha san xuat:\t");
                                
    string nsx Console.ReadLine();
                                
    Console.Write("nhap vao tac gia :\t");
                                
    string tg Console.ReadLine();
                                
    ls.Add(new sach(tdgiansxtg));

                            }
                            catch (
    Exception)
                            {
                                
    Console.WriteLine("\n\n\nlam on nhap vao so nguyen");
                                goto 
    gia;
                            }
                        }
                        else if (
    chose == 2)
                        {
                            
    //nhap vao sach
                            
    Console.Write("nhap vao tua de:\t");
                            
    string tdc Console.ReadLine();
                        
    gia:
                            try
                            {
                                
    Console.Write("nhap vao gia:\t");
                                
    int giac int.Parse(Console.ReadLine());
                                
    Console.Write("nhap vao nha san xuat:\t");
                                
    string nsxc Console.ReadLine();
                                
    ls.Add(new cd(tdcgiacnsxc));

                            }
                            catch (
    Exception)
                            {
                                
    Console.WriteLine("\n\n\nlam on nhap vao so nguyen");
                                goto 
    gia;
                            }


                        }
                        goto 
    menu;
                    }



                }
                public 
    void xuat()
                {
                    for (
    int i 0ls.Counti++)
                    {
                        
    Console.WriteLine(ls[i].ToString());
                    }
                }
                public 
    void sort()
                {
                    
    ls.Sort();
                }

                public 
    void sort1()
                {
                    
    anpham.emsort c anpham.moi();
                    
    c.gi anpham.emsort.ComparisonType.ID;
                    
    ls.Sort(c);
                    
    c.gi anpham.emsort.ComparisonType.TuaDeCungLoai;
                    
    ls.Sort(c);
                }
                public 
    void sort2()
                {
                    
    anpham.emsort c anpham.moi();
                    
    c.gi anpham.emsort.ComparisonType.Gia;
                    
    ls.Sort(c);
                }
                public 
    void ApnhaX(string x)
                {

                }
            }

            class 
    Program
            
    {
                static 
    void Main(string[] args)
                {
                    
    cuahang ch = new cuahang();
                
    menu:
                    
    Console.WriteLine("\n\n\n.......................................................................");
                    
    Console.WriteLine("");
                    
    Console.WriteLine("                 1 nhap                        ");
                    
    Console.WriteLine("                 2 xuat                        ");
                    
    Console.WriteLine("                 3 sap xep theo sach truoc, an pham sau ");
                    
    Console.WriteLine("                 4 nhu 3 nhung neu cung loai thi xep theo tua de ");
                    
    Console.WriteLine("                 5 sx theo gia ");
                    
    Console.WriteLine("                 6 dem cac an pham nha sx XXXXXXXX nao do ");
                    
    Console.WriteLine("                 0 thoat                ");
                    
    Console.WriteLine("");
                    
    Console.WriteLine(".......................................................................");
                    
    int chose;
                    try
                    {
                        
    Console.Write("chon mot so trong menu:\t");
                        
    chose int.Parse(Console.ReadLine());
                        if (
    chose || chose 6)
                        {
                            
    Console.WriteLine("\n\nLAM ON");
                            goto 
    menu;
                        }
                    }
                    catch (
    Exception)
                    {
                        
    Console.WriteLine("\n\nLAM ON");
                        goto 
    menu;
                    }
                    switch (
    chose)
                    {
                        case 
    0: break;
                        case 
    1:
                            
    ch.nhap();
                            goto 
    menu;

                        case 
    2:
                            
    ch.xuat();
                            break;
                        case 
    3:
                            
    ch.sort();
                            
    ch.xuat();
                            break;
                        case 
    4:
                            
    ch.sort1();
                            
    ch.xuat();
                            break;
                        case 
    5:
                            
    ch.sort2();
                            
    ch.xuat();
                            break;
                        case 
    6:
                            
    Console.Write("nhap vao nha xuat ban x can kiem tra:\t");
                            
    string nxb Console.ReadLine();
                            
    ch.ApnhaX(nxb);
                            break;
                        default: goto 
    menu;
                    }
                    if (
    chose 0)
                    {
                    
    menu1:
                        
    Console.WriteLine(".............................................................");
                        
    Console.WriteLine("");
                        
    Console.WriteLine("           1 - goto menu");
                        
    Console.WriteLine("           0 - thoat");
                        
    Console.WriteLine("");
                        
    Console.WriteLine(".............................................................");
                        
    int chose1;
                        try
                        {
                            
    Console.Write("chon mot so trong menu:\t");
                            
    chose1 int.Parse(Console.ReadLine());
                            if (
    chose1 || chose1 1)
                            {
                                
    Console.WriteLine("\n\nLAM ON");
                                goto 
    menu1;
                            }
                        }
                        catch (
    Exception)
                        {
                            
    Console.WriteLine("\n\nLAM ON");
                            goto 
    menu1;
                        }
                        while (
    chose1 0)
                        {
                            switch (
    chose)
                            {
                                case 
    0: break;
                                   default: goto 
    menu;
                               
                            }
                        }
                    }



                }
            }
        }


  5. #5
    Ngày gia nhập
    04 2009
    Bài viết
    6

    Dùng cai' nào là do bạn implement cai' interface nào thôi, để hiểu sâu , bạn nên đọc về phần Collection + Generic của .net là sẽ nói sâu về vấn đề này, thực ra bạn nên hạn chế dùng arraylist nếu có thể dùng được Collection<T> vì so sánh về performce thì arraylist sẽ chậm hơn nhiều do khi xài arraylist phải ép đối tượng trong mảng thành đối tượng mình mong muốn . Thân

Các đề tài tương tự

  1. Cách custom Icomparer cho SortedList. So sánh lỗi: Failed to compare two elements in the array?
    Gửi bởi linh_060 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 25-07-2012, 09:52 PM
  2. sort dùng Icomparer | Sắp xếp dùng Icomparer trên C#?
    Gửi bởi angeltrongminh trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 22-10-2010, 12:20 AM
  3. Lỗi khi sử dụng IComparer trên C#?
    Gửi bởi Vaanres trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 7
    Bài viết cuối: 23-09-2010, 08:10 PM
  4. hỏi về giao diện Icomparer to
    Gửi bởi webshot trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 11-05-2010, 08:06 PM
  5. Hỏi về thực thi IComparable
    Gửi bởi Jindo86 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 14-04-2008, 09:29 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn