I get the following error message on the line:
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>'.
I have tried other solutions and received the same error code.
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.");
}
}
}
}
CodePudding user response:
You need to implement IComparable<Säljare>
in Säljare
. The way you implement it will control how the data will be sorted.
Here's an example that sorts by "Namn", then by "Personnummer", then by "Disktrikt" Then by "AntalSåldaArtiklar", all ASC and not case-sensitve.
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;
}
}