对象数组-修改对象';s字段C#

本文关键字:对象 字段 数组 修改 | 更新日期: 2023-09-27 18:21:58

我遇到了这样一个问题。我是C#的初学者。我有一个对象数组(各种类),在应用程序的一个地方,我想修改字段,比如年龄或名称。施工

static Object[] prac = new Object[10];
public static void Main(string[] args)
{
    prac[0].age = 21;
}

大喊错误

"object"不包含"age"的定义,并且找不到接受"object"类型的第一个参数的扩展方法"age"

我认为这将类似于Java代码,但事实并非如此。我做错了什么?

谨致问候。

对象数组-修改对象';s字段C#

您需要将成员强制转换为包含年龄的类类型。我只假设你的类名是Person,它有一个age成员:

static Object[] prac = new Object[10];
public static void Main(string[] args)
{
    ((Person)prac[0]).age = 21;
}

需要注意的是括号:(Person)prac[0]是强制转换部分,将Object prac[0]强制转换为Person对象。外括号((Person)prac[0])在那里,因此代码被视为Person对象,而不是常规的Object

首先需要将对象强制转换为要使用的类型。

如果使用类型object,则它的属性和方法数量有限。要使用属性age,首先需要将其强制转换为具有该属性的相应类型。例如:

static Object[] prac = new Object[10];
public static void Main(string[] args)
{
    SpecificType myObject = prac[0] as SpecificType; // returns null if not successful
    if (myObject != null)
        myObject.age = 21;
}

但是,我不相信你在这里做的是正确的。我个人会避免键入object,除非绝对没有其他方法(这在我的代码中非常罕见)。C#是一种强类型语言,使用object很容易出错。

Object没有属性age。文中给出了Object的所有性质和方法。

这是对象的数组,正如错误消息所示,"对象"不包含"年龄"的定义

您需要使用具有age字段或属性的类型来声明您的数组。你可以随意修改它。例如:

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

您必须使用类的数组,而不是所有类的基类型Object

static MyClass[] prac = new MyClass[10];

或者你必须铸造它:

MyClass mc = (MyClass) prac[0];
mc.age = 21;

Object是.Net中所有类的基类。

只需将所需的值强制转换为所需的类型化类。或者创建一个具有正确类型而不是对象的列表。