【发布时间】:2018-08-05 23:30:52
【问题描述】:
我是 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;
}
}
}
但是当我尝试这样做时,我收到一条错误消息:“任务”不包含名称的定义,并且找不到接受“任务”类型的第一个参数的扩展方法“名称”。强> 所以我的代码应该做什么,它获取我的字段的名称,它将它存储在我的字段名字符串中,然后我想将此字符串的内容作为我的 task.fieldname 的参数传递。如果我使用与小扳手一起出现的建议字段,例如成本或持续时间,我的代码运行没有问题,但我需要获得更多动态 有什么想法吗?
谢谢
【问题讨论】:
-
我很抱歉,但在阅读了您的帖子后,我的大脑感觉就像意大利面条......您正在尝试做什么以及您的问题到底是什么非常令人困惑。您发布的错误消息说您正在尝试访问
Task类的成员name,但我在您发布的代码中没有看到它。请发布一个可以复制粘贴的完整示例。请尝试更连贯地描述您的目标 -
假设
Task是一个类,那么你需要创建一个名为Name的属性/方法,然后调用Convert.ToDouble(task.Name); -
尝试包含更多代码。任务变量是什么类型?你想达到什么目的?您的问题将得到更快的答复。 ;)
-
这样更好,但我们仍然需要更多信息。
sel变量是什么?它在哪里声明,等等。此外,这是编译器错误还是运行时异常?如果是编译器错误,编译器警告你的行号是多少? -
Task has a Name property,这就是你的意思而不是
fieldname?