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;
}
}
我在线上收到以下错误消息:
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;
}
}