所以我正在學習 c# 并且我遇到了一個問題,當我嘗試列印串列時我似乎收到錯誤 System.Collections.Generic.List`1[Prog2Prov.Program Order] 并且我的代碼目前看起來像這樣。我知道可能有很多錯誤,但是,我仍然試圖掌握 c# 的作業原理。感謝所有的建議。
List<Order> orders = new List<Order>();
bool close = true;
while (close)
{
Console.WriteLine("What type of order is this?(N=Normal/S=Special/#=End)");
string parcel = Console.ReadLine();
string name, location, date;
int number;
if (parcel == "N")
{
Console.Write("Enter the name of your order: ");
name = Console.ReadLine();
Console.Write("Enter your order number: ");
number = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter your order date: ");
date = Console.ReadLine();
Console.Write("Enter your town: ");
location = Console.ReadLine();
orders.Add(new NormalOrder(name, number, date, location));
}
else if (parcel == "S")
{
Console.Write("Enter the name of your order: ");
name = Console.ReadLine();
Console.Write("Enter your order number: ");
number = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter your order date: ");
date = Console.ReadLine();
Console.Write("Enter your country: ");
location = Console.ReadLine();
orders.Add(new NormalOrder(name, number, date, location));
}
else if (parcel == "#")
{
Console.WriteLine("Do you want to see which countries or town your sent your parcel to?(C=Country/T=Town)");
string shipping = Console.ReadLine();
foreach(var order in orders)
if (shipping == "t")
{
Console.WriteLine(order);
}
else if (shipping == "C")
{
Console.WriteLine(order);
}
else
{
Console.WriteLine("Incorrect input, try again!");
}
}
}
}
class Order
{
protected string orderName { get; set; }
protected int orderNumber { get; set; }
protected string orderDate {get; set;}
}
class NormalOrder : Order
{
private string town { get; set; }
public NormalOrder(string orderName, int orderNumber, string orderDate, string town)
{
this.orderName = orderName;
this.orderNumber = orderNumber;
this.orderDate = orderDate;
this.town = town;
}
public override string ToString()
{
return "Order name: " orderName "\nOrder number: " orderNumber "\nOrder date: " orderDate "\nOrder location:" town.ToList();
}
}
class SpecialOrder : Order
{
private string country;
public SpecialOrder(string orderName, int orderNumber, string orderDate, string country)
{
this.orderName = orderName;
this.orderNumber = orderNumber;
this.orderDate = orderDate;
this.country = country;
}
public override string ToString()
{
return "Order name: " orderName "\nOrder number: " orderNumber "\nOrder date: " orderDate "\nOrder location:" country.ToList();
}
uj5u.com熱心網友回復:
我遇到了在嘗試列印串列時出現錯誤 System.Collections.Generic.List`1[Prog2Prov.Program Order] 的問題
我在上面的代碼中發現了一些問題。首先,我將解決實際問題。
if (shipping == "t")
{
Console.WriteLine(orders);
}
您正在列印List<Order>which is的字串表示形式System.Collections.Generic.List1[Prog2Prov.Program Order]。相反,您需要列印Order該串列中的每個。正如我在上面的評論中提到的,你可以做一個簡單的foreach或linq:
這是foreach:
foreach(var o in orders)
Console.WriteLine(o);
這是linq:
Console.WriteLine(string.Join('\n', orders.Select(o => o.ToString())));
另一種選擇,如果你不想這樣做,你可以繼承List<T>,并override在ToString您的新類。
using System.Linq;
public class OrderList : List<Order>
{
public override string ToString() => string.Join("\n", this.Select(o => o.ToString()));
然后您可以使用新串列:
OrderList ol = new OrderList();
ol.Add(new NormalOrder("order 1", 1, DateTime.Now.ToString(), "Nowhere Town"));
ol.Add(new SpecialOrder("special order 2", 2, DateTime.Now.ToString(), "Nowhere Town 2"));
MessageBox.Show(ol.ToString());
這是我上面的輸出:

我看到的另一個問題是:
town.ToList();
也:
country.ToList();
這兩個都定義為string,列印它們時仍然會遇到問題,您需要洗掉ToList()它們上的 。
uj5u.com熱心網友回復:
通過OneOf庫使用可區分聯合。
var myList = new List<OneOf<SpecialOrder, NormalOrder>>()
{
new NormalOrder(...), new SpecialOrder(...)
};
myList[0].Switch(
special => Console.WriteLine("Special"),
normal => Console.WriteLine("Normal"),
);
但是,多型性對于這種情況要好得多
uj5u.com熱心網友回復:
您可以將兩個物件添加到同一個串列中。您需要為此創建一個物件串列。
List<object> list = new List<object>();
list.Add(objType1);
list.Add(objType2);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/340364.html
標籤:C#
