2015-02-23 41 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; 
} 
相关问题