Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从完全限定的数据类型中获取值?_C# - Fatal编程技术网

C# 如何从完全限定的数据类型中获取值?

C# 如何从完全限定的数据类型中获取值?,c#,C#,我有这样的课程 var products = new List<object>(); var f1 = new Fruit("Apple", 25.34, 5); products.Add(f1); foreach (var item in products) { Console.WriteLine(item); } foreach (var item in products) { Console.WriteLine("Name: {0}, Weight: {1},

我有这样的课程

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

foreach (var item in products)
{
   Console.WriteLine(item);
}
foreach (var item in products)
{
   Console.WriteLine("Name: {0}, Weight: {1}, Quantity: {2}",
                                  ((Fruit)item).Name, 
                                  ((Fruit)item).Weight, 
                                  ((Fruit)item).Quantity);
}
public override string ToString()
{
     return Name+":"+Weight+":"+Quantity;
}
当我运行这个程序时,它被写在屏幕上

ConsoleApplication1.Fruit   
我的问题是如何打印我存储在产品列表中的值(苹果,25.34,5)


感谢您的帮助。谢谢。

只需写:Console.WriteLine(item.Name,item.Weight,item.Quantity)

更多信息: 产品清单中的每一项都是水果。因此,如果要打印正确的信息,需要访问水果(项目)对象的属性(名称、重量、数量)


只需写:Console.WriteLine(item.Name,item.Weight,item.Quantity)

更多信息: 产品清单中的每一项都是水果。因此,如果要打印正确的信息,需要访问水果(项目)对象的属性(名称、重量、数量)


您可以尝试以下方法:

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
中在引擎盖下调用)返回对象类型的全名。覆盖此方法,您可以使其返回您想要的任何内容。

您可以尝试以下方法:

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
中在引擎盖下调用)返回对象类型的全名。重写此方法,您可以使其返回您想要的任何内容。

重写ToString()方法:

重写ToString()方法:

改变

var产品=新列表();

var产品=新列表();
这样您就可以这样写,这样就会像表格一样显示:

 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());
        }
var产品=新列表();
var f1=新水果(“苹果”,25.34,5);
var f2=新果实(“橙色”,18.19,3);
产品。添加(f1);
产品。添加(f2);
字符串ss=“Item\t\tWeight\t\tQty\n”;
对于(inti=0;i<60;i++)ss++=“-”;
控制台写入线(ss);
foreach(产品中的var项目)
{
Console.WriteLine(item.Name.ToString()+“\t\t”+item.Weight.ToString()+“\t\t”+item.Quantity.ToString());
}
更改

var products = new List<object>();
var产品=新列表();

var产品=新列表();
这样您就可以这样写,这样就会像表格一样显示:

 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());
        }
var产品=新列表();
var f1=新水果(“苹果”,25.34,5);
var f2=新果实(“橙色”,18.19,3);
产品。添加(f1);
产品。添加(f2);
字符串ss=“Item\t\tWeight\t\tQty\n”;
对于(inti=0;i<60;i++)ss++=“-”;
控制台写入线(ss);
foreach(产品中的var项目)
{
Console.WriteLine(item.Name.ToString()+“\t\t”+item.Weight.ToString()+“\t\t”+item.Quantity.ToString());
}
您可以这样做

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

foreach (var item in products)
{
   Console.WriteLine(item);
}
foreach (var item in products)
{
   Console.WriteLine("Name: {0}, Weight: {1}, Quantity: {2}",
                                  ((Fruit)item).Name, 
                                  ((Fruit)item).Weight, 
                                  ((Fruit)item).Quantity);
}
public override string ToString()
{
     return Name+":"+Weight+":"+Quantity;
}
或者您可以在Fruit类中重写ToString方法,并像这样更改它

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

foreach (var item in products)
{
   Console.WriteLine(item);
}
foreach (var item in products)
{
   Console.WriteLine("Name: {0}, Weight: {1}, Quantity: {2}",
                                  ((Fruit)item).Name, 
                                  ((Fruit)item).Weight, 
                                  ((Fruit)item).Quantity);
}
public override string ToString()
{
     return Name+":"+Weight+":"+Quantity;
}
你可以这样做

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

foreach (var item in products)
{
   Console.WriteLine(item);
}
foreach (var item in products)
{
   Console.WriteLine("Name: {0}, Weight: {1}, Quantity: {2}",
                                  ((Fruit)item).Name, 
                                  ((Fruit)item).Weight, 
                                  ((Fruit)item).Quantity);
}
public override string ToString()
{
     return Name+":"+Weight+":"+Quantity;
}
或者您可以在Fruit类中重写ToString方法,并像这样更改它

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

foreach (var item in products)
{
   Console.WriteLine(item);
}
foreach (var item in products)
{
   Console.WriteLine("Name: {0}, Weight: {1}, Quantity: {2}",
                                  ((Fruit)item).Name, 
                                  ((Fruit)item).Weight, 
                                  ((Fruit)item).Quantity);
}
public override string ToString()
{
     return Name+":"+Weight+":"+Quantity;
}


为什么要将对象存储在
列表
中,使用
列表
,然后就可以访问foreach循环中的每个属性。因为我也打算对其他类使用相同的列表。e、 g蔬菜而不是水果。创建一个基类,并将该类中的
Fruits
Vegitable
中的相关属性组合在一起,然后创建一个
列表
我得到了它。谢谢帮助。为什么要将对象存储在
列表
中,使用
列表
,然后就可以访问foreach循环中的每个属性。因为我也打算对其他类使用相同的列表。e、 g蔬菜而不是水果。创建一个基类,并将该类中的
Fruits
Vegitable
中的相关属性组合在一起,然后创建一个
列表
我得到了它。谢谢你的帮助。有没有其他方法可以替代ToString方法?@Junaid:目前为止这里给出的所有答案都是正确的,由你选择你最喜欢的解决方案。有没有其他方法可以替代ToString方法?@Junaid:目前为止这里给出的所有答案都是正确的,您可以选择您最喜欢的解决方案。thnx我已经更改了类名,并在此处编辑了代码。@Junaid您的意思是将
foreach
item.name
等一起使用?是的,我无法访问item.name等字段。它的显示错误。@Junaid oops:(!你是对的,我们必须在那里进行转换。如果你尝试更新的一个,它会起作用。谢谢!好的,我也会尝试。thnx我已经更改了我的类名,并在这里编辑了代码。@Junaid你的意思是将
foreach
item.name
等一起使用?是的,我无法访问item.name之类的字段。显示错误。@Junaid:(!你说得对,我们必须在那里投一个球。如果你尝试更新的球,它会有用的。谢谢!好的,我也会试试。