对象数组-修改对象';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代码,但事实并非如此。我做错了什么?
谨致问候。
您需要将成员强制转换为包含年龄的类类型。我只假设你的类名是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中所有类的基类。
只需将所需的值强制转换为所需的类型化类。或者创建一个具有正确类型而不是对象的列表。