You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# OOP入门求助:如何将对象存入数组及输出异常问题

嘿,很高兴看到你开始C# OOP的练习!我来帮你梳理下问题所在,以及怎么调整代码达到你想要的效果~

为什么输出不是你期望的?

你看到的OOP_Car_Human.Car是C#中对象默认的ToString()方法输出——所有类都继承自object,而object.ToString()的默认行为就是返回类的完全限定名(命名空间+类名)。另外,用object[]存储Car对象其实没必要,也没发挥C#强类型语言的优势。

下面是具体的修正方案:

1. 重写Car类的ToString()方法

在Car类里添加这个方法,让它返回你想要的车型信息:

public override string ToString()
{
    return Model; // 也可以扩展成更详细的信息,比如return $"{Model} (最高时速: {Speed})";
}

2. 使用强类型数组(Car[]而非object[])

C#是强类型语言,既然数组里存的全是Car对象,直接用Car[]会更安全、更简洁,还能避免不必要的类型转换。你甚至可以直接用数组初始化器一次性创建数组,不用逐个赋值:

// 强类型数组+初始化器,一步到位
Car[] cars = new Car[] { porsche, mercedes, bmw, punto, ferrari };
// 或者更简洁的写法,编译器会自动推断类型
var cars = new[] { porsche, mercedes, bmw, punto, ferrari };

修正后的完整代码

static void Main(string[] args) { 
    // Create 5 Car Objects and add them to Array 
    var porsche = new Car("Porshe", 340); 
    var mercedes = new Car("Mercedes", 320); 
    var bmw = new Car("BMW", 330); 
    var punto = new Car("Punto", 220); 
    var ferrari = new Car("Ferrari", 380); 

    // 用强类型数组+初始化器,更简洁
    var cars = new[] { porsche, mercedes, bmw, punto, ferrari }; 

    foreach(var car in cars) { 
        Console.WriteLine($"some {car}"); 
    } 
} 

class Car { 
    public Car(string model, int speed) { 
        Model = model; 
        Speed = speed; 
    } 
    public string Model { get; set; } 
    public int Speed { get; set; } 
    public int CalculateSpeed( int speed, int skill) { 
        return speed * skill; 
    }

    // 重写ToString方法,自定义输出内容
    public override string ToString()
    {
        return Model;
    }
}

运行后的输出

现在控制台会输出你期望的内容:

some Porshe
some Mercedes
some BMW
some Punto
some Ferrari

另外补充一点:如果你之后需要访问数组中Car对象的其他属性(比如Speed),用Car[]的话可以直接访问,不用做类型转换,这也是强类型数组的优势哦~

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:12:16