我有以下类,它将保存从 MS 项目中提取的一些数据:
public class Milestone
{
MSProject.Project ActiveProject = Globals.ThisAddIn.Application.ActiveProject;
public int startDay;
public string startFullMonthName;
public int startYear;
public int endDay;
public string endFullMonthName;
public int endYear;
public Milestone(MSProject.Task oSubTask)
{
string pjStartDate = oSubTask.GetField(ActiveProject.Application.FieldNameToFieldConstant("Start", MSProject.PjFieldType.pjTask));
DateTime startDate = dateToName(pjStartDate);
string pjEndDate = oSubTask.GetField(ActiveProject.Application.FieldNameToFieldConstant("Start", MSProject.PjFieldType.pjTask));
DateTime endDate = dateToName(pjEndDate);
startDay = startDate.Day;
startFullMonthName = startDate.ToString("MMMM", CultureInfo.CreateSpecificCulture("es"));
startYear = startDate.Year;
endDay = endDate.Day;
endFullMonthName = endDate.ToString("MMMM", CultureInfo.CreateSpecificCulture("es"));
endYear = endDate.Year;
}
}
然后我创建一个Milestone
先前创建的类的对象列表,我想读取它的属性。但是,当我尝试访问这些(在 foreach 中)时,它向我显示错误“对象不包含 startDay 的定义”。
List<object> milestoneList = new List<object>();
MSProject.Project ActiveProject = Globals.ThisAddIn.Application.ActiveProject;
MSProject.Task oSubTask;
int pjStart = 101;
for (int i = pjStart; i <= ActiveProject.Tasks.Count; i++)
{
oSubTask = ActiveProject.Tasks[i];
if (oSubTask.Summary)
{
Milestone m = new Milestone(oSubTask);
milestoneList.Add(m);
}
}
int rows = milestoneList.Count();
int columns = 6;
object[,] data = new object[rows, columns];
object[] marray = milestoneList.ToArray();
foreach (var m in milestoneList)
{
Debug.WriteLine(m.startDay); // aquí intento acceder a la propiedad
}
另一方面,当我进行调试时,它会在本地窗口中显示它们:
我究竟做错了什么?
milesstoneList
是类型的列表,System.Object
并且该类型System.Object
没有名为 的属性startDay
。您必须将类型转换或转换为System.Object
属性具有的数据类型startDay
,在本例中为 aMilestone
,才能访问该属性:您还可以使用
dynamic
在运行时尝试访问该属性的类型(如果存在):