我是c#世界的新手,我试图动态传递一个参数 所以我在ms Project上做了一个小插件,当数据是持续时间或成本时我需要做一些计算,所以我有很多持续时间字段Duration1,Duration2,...和成本字段相同 所以我正在做的很简单,我找到所有持续时间ID,然后我把它们放在我的DurationList中,之后我做了检查,如果我只选择一列并且这个选定列的ID在我的列表中,我取这个字段的名称,我尝试将其作为参数传递 这是我的一段代码,这里我只是在处理持续时间
using MSProject = Microsoft.Office.Interop.MSProject;
private void Application_WindowSelectionChange(MSProject.Window Window, MSProject.Selection sel, object selType)
{
MSProject.Task task = null;
List <int> DurationList = new List<int> { 188744967,...};
int value= Int32.Parse(Application.ActiveSelection.FieldIDList[1]);
Double Cost=0, CostTotal=0;
if (DurationList.Contains(value)){
string fieldname= Application.ActiveSelection.FieldName[1];
for (int i = 1; i <= sel.Tasks.Count; i++)
{
task = sel.Tasks[i];
Cost = Convert.ToDouble(task.fieldname);
CostTotal += Cost;
}
}
}
但是当我尝试时,我收到一条错误消息:&#34; Task&#34;不包含名称的定义,也没有扩展方法&#39; name&#39;接受类型&#39;任务&#39;的第一个参数。可以找到。 所以我的代码被做了什么,它得到我的字段的名称,它将它存储在我的fieldname字符串中,之后我想传递这个字符串的内容作为我的task.fieldname的句子。如果我使用了一个小扳手出现的建议字段,如成本或持续时间,我的代码运行没有问题,但我需要得到一些更动态的东西 有什么想法吗?
由于
答案 0 :(得分:0)
如果我终于明白了,这就是你如何获得名为&#34; fieldname&#34;的任务属性的值:
task = sel.Tasks[i];
var valueofFieldName = task.GetType().GetProperty(fieldname).GetValue(task, null);
Cost = Convert.ToDouble(valueofFieldName);
CostTotal += Cost;