C#没有装箱转换CS0315错误

C# There is no boxing conversion CS0315 error

我在线上收到以下错误消息:

BubbleSort(säljare);

Error CS0315 The type 'Inlämingsuppgift2ConsoleApplication.Program.Säljare' cannot be used as type parameter 'Säljare' in the generic type or method 'BubbleSort<Säljare>(Säljare[])'. There is no boxing conversion from 'Inlämingsuppgift2ConsoleApplication.Program.Säljare' to 'System.IComparable<Inlämingsuppgift2ConsoleApplication.Program.Säljare>'.

我尝试过其他解决方案并收到相同的错误代码。

namespace Inlämingsuppgift2ConsoleApplication
{
    class Program
    {
        struct Säljare
        {
            public String Namn;
            public String Personnummer;
            public String Distrikt;
            public int AntalSåldaArtiklar;
        }

        [STAThread]

        static void Main(string[] args)
        {
            System.Console.Write("Hur många säljare vill du registrera?:");
            string antalSäljare = System.Console.ReadLine();
            System.Console.WriteLine("Registrera säljare:");
            int Antalsäljare = int.Parse(antalSäljare);

            Säljare[] säljare = new Säljare[Antalsäljare];

            int nivå1 = 0;
            int nivå2 = 0;
            int nivå3 = 0;
            int nivå4 = 0;
                        
            void BubbleSort<Säljare>(Säljare[] list) where Säljare : IComparable<Säljare>
            
            {
                
                for (int i = 0; i < list.Length - 1;  i++)
                {
                                                   
                    for (int j = 0; j < list.Length - 1 - i; j++)
                    {
                         if (list[j].CompareTo(list[j - 1]) < 0)
                        {                                                                       
                            Säljare tmp = list[j + 1];
                            list[j + 1] = list[j];
                            list[j] = tmp;
                        }
                    }
                    
                }
            }

                for (int i = 0; i < Antalsäljare; i++)

                {

                    System.Console.Write(" Ange Namn: ");
                    säljare[i].Namn = System.Console.ReadLine();
                    System.Console.Write(" Ange Personnummer: ");
                    säljare[i].Personnummer = System.Console.ReadLine();
                    System.Console.Write(" Ange Distrikt: ");
                    säljare[i].Distrikt = System.Console.ReadLine();
                    System.Console.Write(" Ange antal Artiklar: ");
                    säljare[i].AntalSåldaArtiklar = int.Parse(System.Console.ReadLine());
                    Console.WriteLine("\n");

                }

                for (int j = 0; j < Antalsäljare; j++)
                {

                    if (säljare[j].AntalSåldaArtiklar < 50)
                    {

                        nivå1++;
                    }

                    else if (säljare[j].AntalSåldaArtiklar >= 50 && säljare[j].AntalSåldaArtiklar < 100)
                    {
                        nivå2++;
                    }

                    else if (säljare[j].AntalSåldaArtiklar >= 100 && säljare[j].AntalSåldaArtiklar < 200)

                    {
                        nivå3++;
                    }

                    else if (säljare[j].AntalSåldaArtiklar > 200)
                    {
                        nivå4++;
                    }

                }

                BubbleSort(säljare);

                try
                {
                    StreamWriter sw = new StreamWriter("C:\Test.txt");

                    for (int i = 0; i < säljare.Length; i++)
                    {
                        Console.WriteLine("\n");
                        Console.WriteLine("Namn: " + säljare[i].Namn);
                        Console.WriteLine("Personnummer: " + säljare[i].Personnummer);
                        Console.WriteLine("Distrikt: " + säljare[i].Distrikt);
                        Console.WriteLine("Antal sälj: " + säljare[i].AntalSåldaArtiklar);

                        sw.WriteLine("\n");
                        sw.WriteLine("Namn: " + säljare[i].Namn);
                        sw.WriteLine("Personnummer: " + säljare[i].Personnummer);
                        sw.WriteLine("Distrikt: " + säljare[i].Distrikt);
                        sw.WriteLine("Antal sälj: " + säljare[i].AntalSåldaArtiklar);

                        sw.WriteLine("\n");
                        sw.WriteLine("-----------------------------");
                        sw.WriteLine("\n Antal Säljare på nivå 1: " + nivå1);
                        sw.WriteLine("Antal Säljare på nivå 2: " + nivå2);
                        sw.WriteLine("Antal Säljare på nivå 3: " + nivå3);
                        sw.WriteLine("Antal Säljare på nivå 4: " + nivå4);
                        sw.WriteLine("\n -----------------------------");

                        Console.WriteLine("\n");
                        Console.WriteLine("-----------------------------");
                        Console.WriteLine("\n Antal Säljare på nivå 1: " + nivå1);
                        Console.WriteLine("Antal Säljare på nivå 2: " + nivå2);
                        Console.WriteLine("Antal Säljare på nivå 3: " + nivå3);
                        Console.WriteLine("Antal Säljare på nivå 4: " + nivå4);
                        Console.WriteLine("\n -----------------------------");
                        sw.Flush();

                    }

                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception: " + e.Message);
                }

                finally
                {
                    Console.WriteLine("Executing finally block.");
               }
        }
    }
}

您需要在 Säljare 中实施 IComparable<Säljare>。您实现它的方式将控制数据的排序方式。

这是一个示例,按“Namn”排序,然后按“Personnummer”排序,然后按“Disktrikt”排序,然后按“AntalSåldaArtiklar”排序,全部为 ASC,不区分大小写。

    struct Säljare : IComparable<Säljare>
    {
        public String Namn;
        public String Personnummer;
        public String Distrikt;
        public int AntalSåldaArtiklar;
        public int CompareTo(Säljare other)
        {
             var sc = StringComparison.OrdinalIgnoreCase;

             var result = string.Compare(Namn, other.Namn, sc);
             if (result != 0) return result;

             result = string.Compare(Personnummer, other.Personnummer, sc);
             if (result != 0) return result;

             result = string.Compare(Distrikt, other.Distrikt, sc);
             if (result != 0) return result;

             return AntalSåldaArtiklar - other.AntalSåldaArtiklar;
        }
    }