Asp.net 在vb中将java.util.list的值转换为字符串或其他正常格式
在我的应用程序中,我使用mpxj从microsoft项目文件中提取项目-我需要的项目之一是前置项。我可以使用mpxj的内置函数来提取前置函数,该函数返回一种java.util.list类型-我可以将其作为对象保存到变量,但我需要找到一种方法将数据转换为易于使用的格式,以便将其存储到数据库中。下面列出了我用来从项目文件中提取前置代码的代码行Asp.net 在vb中将java.util.list的值转换为字符串或其他正常格式,asp.net,vb.net,ms-project,mpxj,Asp.net,Vb.net,Ms Project,Mpxj,在我的应用程序中,我使用mpxj从microsoft项目文件中提取项目-我需要的项目之一是前置项。我可以使用mpxj的内置函数来提取前置函数,该函数返回一种java.util.list类型-我可以将其作为对象保存到变量,但我需要找到一种方法将数据转换为易于使用的格式,以便将其存储到数据库中。下面列出了我用来从项目文件中提取前置代码的代码行 Dim predecessors = task.getPredecessors 这是将跟踪点放入以获取前辈值时的结果 [[Relation [Task id
Dim predecessors = task.getPredecessors
这是将跟踪点放入以获取前辈值时的结果
[[Relation [Task id=4 uniqueID=45577 name=Standards Training - Round 2] -> [Task id=3 uniqueID=45576 name=Process Excellence Training]]]
即使我可以将上面的内容作为字符串,我也可以充分利用它来获取所需的数据。在上面的示例中,前置列表中有一个项目,但有时有多个项目。下面是一个有多个项目时的跟踪点示例
[[Relation [Task id=63 uniqueID=45873 name=Complete IP Binder] -> [Task id=47 uniqueID=45857 name=Organizational Assessment]], [Relation [Task id=63 uniqueID=45873 name=Complete IP Binder] -> [Task id=49 uniqueID=45859 name=Document Deliverables]], [Relation [Task id=63 uniqueID=45873 name=Complete IP Binder] -> [Task id=56 uniqueID=45866 name=Infrastructure Deliverables]], [Relation [Task id=63 uniqueID=45873 name=Complete IP Binder] -> [Task id=58 uniqueID=45868 name=IT Deliverables]], [Relation [Task id=63 uniqueID=45873 name=Complete IP Binder] -> [Task id=60 uniqueID=45870 name=Organizational Deliverables]]]
感谢您的帮助。使用IKVM生成的.Net程序集时,有两种方法可以使用Java集合。第一种方法是用Java方式进行操作,并使用迭代器:
java.util.List predecessors = task.getPredecessors();
java.util.Iterator iter = predecessors.iterator();
while (iter.hasNext())
{
Relation rel = (Relation)iter.next();
System.Console.WriteLine(rel);
}
class EnumerableCollection
{
public EnumerableCollection(Collection collection)
{
m_collection = collection;
}
public IEnumerator GetEnumerator()
{
return new Enumerator(m_collection);
}
private Collection m_collection;
}
public struct Enumerator : IEnumerator
{
public Enumerator(Collection collection)
{
m_collection = collection;
m_iterator = m_collection.iterator();
}
public object Current
{
get
{
return m_iterator.next();
}
}
public bool MoveNext()
{
return m_iterator.hasNext();
}
public void Reset()
{
m_iterator = m_collection.iterator();
}
private Collection m_collection;
private Iterator m_iterator;
}
另一种方法是添加一些“可用性”代码来隐藏这一点:
foreach(Relation rel in ToEnumerable(task.getPredecessors()))
{
System.Console.WriteLine(rel);
}
为此,我创建了“ToEnumerable”方法:
以及EnumerableCollection类,该类隐藏迭代器的使用:
java.util.List predecessors = task.getPredecessors();
java.util.Iterator iter = predecessors.iterator();
while (iter.hasNext())
{
Relation rel = (Relation)iter.next();
System.Console.WriteLine(rel);
}
class EnumerableCollection
{
public EnumerableCollection(Collection collection)
{
m_collection = collection;
}
public IEnumerator GetEnumerator()
{
return new Enumerator(m_collection);
}
private Collection m_collection;
}
public struct Enumerator : IEnumerator
{
public Enumerator(Collection collection)
{
m_collection = collection;
m_iterator = m_collection.iterator();
}
public object Current
{
get
{
return m_iterator.next();
}
}
public bool MoveNext()
{
return m_iterator.hasNext();
}
public void Reset()
{
m_iterator = m_collection.iterator();
}
private Collection m_collection;
private Iterator m_iterator;
}
一种更有趣的方法是将此功能添加到java集合类中,这将使您的代码不那么混乱。我计划在下一版本中尝试发布一个包含有用扩展方法的程序集,作为MPXJ的一部分。在使用IKVM生成的.Net程序集时,有两种方法可以使用Java集合。第一种方法是用Java方式进行操作,并使用迭代器:
java.util.List predecessors = task.getPredecessors();
java.util.Iterator iter = predecessors.iterator();
while (iter.hasNext())
{
Relation rel = (Relation)iter.next();
System.Console.WriteLine(rel);
}
class EnumerableCollection
{
public EnumerableCollection(Collection collection)
{
m_collection = collection;
}
public IEnumerator GetEnumerator()
{
return new Enumerator(m_collection);
}
private Collection m_collection;
}
public struct Enumerator : IEnumerator
{
public Enumerator(Collection collection)
{
m_collection = collection;
m_iterator = m_collection.iterator();
}
public object Current
{
get
{
return m_iterator.next();
}
}
public bool MoveNext()
{
return m_iterator.hasNext();
}
public void Reset()
{
m_iterator = m_collection.iterator();
}
private Collection m_collection;
private Iterator m_iterator;
}
另一种方法是添加一些“可用性”代码来隐藏这一点:
foreach(Relation rel in ToEnumerable(task.getPredecessors()))
{
System.Console.WriteLine(rel);
}
为此,我创建了“ToEnumerable”方法:
以及EnumerableCollection类,该类隐藏迭代器的使用:
java.util.List predecessors = task.getPredecessors();
java.util.Iterator iter = predecessors.iterator();
while (iter.hasNext())
{
Relation rel = (Relation)iter.next();
System.Console.WriteLine(rel);
}
class EnumerableCollection
{
public EnumerableCollection(Collection collection)
{
m_collection = collection;
}
public IEnumerator GetEnumerator()
{
return new Enumerator(m_collection);
}
private Collection m_collection;
}
public struct Enumerator : IEnumerator
{
public Enumerator(Collection collection)
{
m_collection = collection;
m_iterator = m_collection.iterator();
}
public object Current
{
get
{
return m_iterator.next();
}
}
public bool MoveNext()
{
return m_iterator.hasNext();
}
public void Reset()
{
m_iterator = m_collection.iterator();
}
private Collection m_collection;
private Iterator m_iterator;
}
一种更有趣的方法是将此功能添加到java集合类中,这将使您的代码不那么混乱。我计划在下一个版本中尝试发布一个包含有用扩展方法的程序集,作为MPXJ的一部分。在C#3.5+中,创建一个扩展方法为这些Java列表提供一个漂亮的、类型安全的枚举器非常容易,因为yield
关键字。你可以这样做:
public static class JavaExtensions
{
public static IEnumerable<T> toIEnumerable<T>(this java.util.List list)
{
if (list != null)
{
java.util.Iterator itr = list.iterator();
while (itr.hasNext())
{
yield return (T)itr.next();
}
}
}
}
在C#3.5+中,创建一个扩展方法为这些Java列表提供一个漂亮的、类型安全的枚举器非常容易,因为yield
关键字。你可以这样做:
public static class JavaExtensions
{
public static IEnumerable<T> toIEnumerable<T>(this java.util.List list)
{
if (list != null)
{
java.util.Iterator itr = list.iterator();
while (itr.hasNext())
{
yield return (T)itr.next();
}
}
}
}
通过使用tostring然后向右和向左剪切我需要的内容,可以更快地完成此操作-不知道为什么在之前删除了此操作通过使用tostring然后向右和向左剪切我需要的内容,可以更快地完成此操作-不知道为什么在之前删除此操作现在可能适用于您,但是不能保证toString()的输出永远保持不变。它实际上只是在调试时快速查看对象内容的某些标识方面的一种方式(请注意,它不包括关系的类型或滞后值)。为了将来维护您的代码的人,我建议您按照预期学习使用api,特别是当您从toString输出中解析出这些任务的各个属性时。这可能适用于您,但不能保证toString()的输出永远不变。它实际上只是在调试时快速查看对象内容的某些标识方面的一种方式(请注意,它不包括关系的类型或滞后值)。为了将来维护您的代码的人,我建议您按照预期学习使用api,特别是当您从toString输出中解析出这些任务的各个属性时。您不知道这在多大程度上挽救了我的生命!谢谢。你不知道这救了我多少命!谢谢