将 C# 列表传递给 X++
本文关键字:X++ 列表 | 更新日期: 2023-09-27 18:30:54
在 Microsoft Dynamics AX 2012 AOT 中的 C# 项目中,我有一个返回 List 的方法,我想在 X++ 代码中引用此方法。
我最初的想法是,这应该很容易。像这样:List XppProjectList = cSharpGetProjectList.GetStringList();
.但是,这并没有奏效。
在对互联网进行广泛研究后,我发现我可以使用System.Collections.ArrayList
而不是List
,这次它有效,但仅适用于单维集合。
应该使用 C# 集合的 X++ 代码:
public void GetProjectList()
{
cSharpGetProjectList = new PS2010Service.CSharpGetProjectList();
projectList = cSharpGetProjectList.GetStringList();
length = projectList.get_Count();
for (i = 0; i < length; i++)
{
info(projectList.get_Item(i));
}
}
C# 方法返回有效的List<T>
:
public static List<String> GetStringList()
{
List<String> list = new List<String>();
list.Add("One");
list.Add("Two");
list.Add("Three");
return list;
}
返回ArrayList
的 C# 方法也有效:
public static ArrayList GetStringList()
{
ArrayList list = new ArrayList();
list.Add("One");
list.Add("Two");
list.Add("Three");
return list;
}
返回不起作用的多维ArrayList
的 C# 方法:
public ArrayList GetStringList()
{
ArrayList list1 = new ArrayList();
list1.Add("One");
list1.Add("Two");
list1.Add("Three");
ArrayList list2 = new ArrayList();
list2.Add("1");
list2.Add("2");
list2.Add("3");
ArrayList list = new ArrayList();
for (int i = 0; i < list1.Count; i++)
{
list.Add(new string[] { list1[i].ToString(), list2[i].ToString() });
}
return list;
}
返回的错误是:Clr 互操作封送:不支持的类型。执行代码时出错:全局(对象),使用无效参数调用的方法信息。虽然它可以读取此ArrayList
的长度并返回 3。
多维List<T>
也是如此,我不会在这里发布以缩短问题。
所以我的问题是 - 如何在 X++ 代码中使用 C# 的多维列表?谢谢!
来自 .NET 的返回值与string[2]
元素ArrayList
。
代码应如下所示:
System.Collections.ArrayList result = cSharpGetProjectList.GetStringList();
System.String[] netEmement;
str val1, val2;
int i;
for (i=0; i < result.get_Count(); i++)
{
netEmement = result.get_Item(i);
val1 = netEmement.get_Item(0);
val2 = netEmement.get_Item(1);
}
代替 for 你也可以使用枚举器:
System.Collections.IEnumerator netEnumerator = result.GetEnumerator();
while (netEnumerator.MoveNext())
{
netEmement = netEnumerator.get_Current();
val1 = netEmement.get_Item(0);
val2 = netEmement.get_Item(1);
}