2015-02-23 73 views
0

我有這樣如何從完全限定的數據類型獲取值?

var products = new List<object>(); 
var f1 = new Fruit("Apple", 25.34, 5); 
products.Add(f1); 

foreach (var item in products) 
{ 
    Console.WriteLine(item); 
} 

的Program.cs類,這是我Fruit.cs類

public Fruit(string name, double weight, int quantity) 
{ 
    Name = name; 
    Weight = weight; 
    Quantity = quantity; 
} 

    public string Name { get; set; } 

    public double Weight { get; set; } 

    public int Quantity { get; set; } 

當我運行這個程序,這是屏幕

ConsoleApplication1.Fruit 

上寫我的問題是如何打印存儲在我的產品列表中的值(Apple,25.34,5)?

任何幫助表示讚賞。謝謝。

+0

爲什麼你存儲你的對象'名單',使用'名單'然後您可以將您的foreach循環內訪問每個屬性。 – Habib 2015-02-23 18:41:15

+0

因爲我打算爲其他類使用相同的列表。如蔬菜而不是水果。 – Junaid 2015-02-23 18:44:27

+1

創建一個基類,並將該類中'Fruits'和'Vegitable'的相關屬性組合在一起,然後有一個'List ' – Habib 2015-02-23 18:45:51

回答

3

重寫ToString()方法:

public override ToString() 
{ 
    return this.Name + "," + this.Weight + "," + this.Quantity 
} 
+0

有沒有其他的方式,而不是重寫ToString方法? – Junaid 2015-02-23 18:45:43

+0

@Junaid:到目前爲止所有給出的答案都是正確的,取決於你最喜歡的解決方案取決於你。 – flayn 2015-02-23 22:23:18

0

只要寫:Console.WriteLine(item.Name,item.Weight,item.Quantity);

更多信息: 在產品列表中的每個產品類型的水果。所以如果你想打印正確的信息,你需要訪問Fruit(item)對象的屬性(Name,Weight,Quantity)。

foreach (var item in products) 
{ 
    Console.WriteLine((Fruit)item.Name, (Fruit)item.Weight, (Fruit)item.Quantity); 
} 
1

你可以嘗試這樣的事:

foreach (var item in products) 
{ 
    Console.WriteLine(String.Format("Name: {0}, Weight: {1}, Quantity: {2}", 
            ((Fruit)item).Name, 
            ((Fruit)item).Weight, 
            ((Fruit)item).Quantity)); 
} 

,或者您可以覆蓋Fruits類的ToString方法:

public class Fruit 
{ 
    public string Name { get; set; } 

    public double Weight { get; set; } 

    public int Quantity { get; set; } 

    public Fruit(string name, double weight, int quantity) 
    { 
     Name = name; 
     Weight = weight; 
     Quantity = quantity; 
    } 

    public override string ToString() 
    { 
     return String.Format("Name: {0}, Weight: {1}, Quantity: {2}", Name, Weight, Quantity); 
    } 
} 

和住你的foreach聲明,因爲它是:

foreach (var item in products) 
{ 
    Console.WriteLine(item); 
} 

之所以得到ConsoleApplication1.Fruits是因爲ToString方法的默認實現(在上面的Console.WriteLine的引擎之下調用)會返回對象類型的完整名稱。覆蓋這個方法,你可以使它返回任何你想要的。

+0

thnx我已經改變了我的課程名稱,並在此編輯了代碼。 – Junaid 2015-02-23 18:51:46

+0

@Junaid歡迎你。好吧 – Christos 2015-02-23 18:52:12

+0

btw你的第一個答案沒有奏效。 – Junaid 2015-02-23 18:53:04

0

變化

var products = new List<object>(); 

var products = new List<Fruits>(); 

,這樣就可以像這樣等會顯示一個類似的表寫:

var products = new List<object>(); 
     var f1 = new Fruits("Apple", 25.34, 5); 
     var f2 = new Fruits("Orange", 18.19, 3); 
     products.Add(f1); 
     products.Add(f2); 
     String ss = "Item\t\tWeight\t\tQty\n"; 
     for (int i = 0; i < 60; i++) ss += "-"; 

     Console.WriteLine(ss); 

     foreach (var item in products) 
     { 
      Console.WriteLine(item.Name.ToString() + "\t\t" + item.Weight.ToString() + "\t\t" + item.Quantity.ToString()); 
     } 
1

你可以像這樣

foreach (var item in products) 
{ 
    Console.WriteLine("Name: {0}, Weight: {1}, Quantity: {2}", 
            ((Fruit)item).Name, 
            ((Fruit)item).Weight, 
            ((Fruit)item).Quantity); 
} 

,或者您可以覆蓋在水果類的ToString方法並改變它像這樣

public override string ToString() 
{ 
    return Name+":"+Weight+":"+Quantity; 
} 
相關問題