如何在C#1.1中声明和处理动态列表列表

时间:2012-04-01 19:33:48

标签: c# .net-1.1 visual-studio-2003

我有一个名为 CatalogItem 的自定义类,我在一个方法中收到它作为一个数组参数。

基于这些元素的一个属性,必须汇编该方法返回的矩阵。

public CatalogItem[][] ReorderCatalogItems(CatalogItem[] items)

属性

public string Id
public string Version
public bool HasVersion
public bool HasDependencies
public string Name
public string DisplayName
public bool IsExportable
public string CatalogName
public string ZipName

但Visual Studio 2003不是2005年,2008年或2010年。自从我最后一次在此框架(1.1)中编码以来已经有一段时间了。

我有这个,因为List和泛型不存在

StringBuilder zipNames = new StringBuilder();

foreach(CatalogItem item in items)
{
    if(item.ZipName != string.Empty && zipNames.ToString().IndexOf(item.ZipName) == -1)
    {
        zipNames.Append(item.ZipName);
        zipNames.Append("\r\n");
        //StringBuilder.AppendLine(string) is unexistent in fwk 1.1
    }
}

//SplitString is a custom method that does a string.Split with a string parser (unexistent out-of-the-box feat. in 2003)
string[] sZipNames = SplitString(zipNames.ToString(),"\r\n");

CatalogItem[][] orderedItems = new CatalogItem[sZipNames.Length+1][];
///+1 since string.Empty is one of the valid elements 
/// even when not listed on zZipNames (name default)

foreach(CatalogItem item in items)
{
    int i = 0;
    bool Next = true;
    while(Next)
    {
        if(item.ZipName == string.Empty)
        {
            //I'm out of ideas now
        }
        if(sZipNames[i].IndexOf(item.ZipName) == -1)
        {
            //I'm out of ideas now
        }
        i++;
    }
}

@Edit: 哦,为了进一步理解,这是我的真实和最后目标:用这种格式创建一个xml。我已经开发了一个XMLDoc方法,所以我需要创建一个控制中断迭代

<?xml version="1.0" encoding="utf-8"?>
<export>
<items outputfile="c:\data\erase\exportbatch.zip">
        <item>
            <catalog>operations</catalog>                                          
            <id>Od4f0f211-4673-49cd-a197-567768b9c00a</id>    
            <name>NewOp</name>                                 
            <dependencies>false</dependencies>
        </item>
        <item>
            <catalog>operations</catalog>                                          
            <id>Oc19efe25-33ec-45b7-9cc1-a813ffbecc61</id>    
            <name>TestAttributes</name>                                                                     
        </item>
    </items>
    <items outputfile="c:\data\erase\exportbatch2.zip">
        <item>
            <catalog>transactions</catalog>                                          
            <id>T15454fe0-7afb-4146-9ec3-83547f96b25a</id>    
            <name>GetAllEmployee</name>
            <dependencies>true</dependencies>
        </item>
        <item>
            <catalog>transactions</catalog>                                          
            <id>Tc37afa55-39e4-416d-9088-011a117cff72</id>    
            <name>CustOrderHist_Test123</name>                    
            <dependencies>false</dependencies>
        </item>
    </items>
</export>

1 个答案:

答案 0 :(得分:5)

在.NET 1.1中,如果你想要“完全”动态大小,你基本上必须使用ArrayList,其中每个元素都是ArrayList。这是一种痛苦,涉及到各地的铸造,但这就是生活。

在这种情况下,我不确定你真的需要它 - 它并不完全清楚你想要做什么,但是如果你实际上知道“外部”数组的大小你可以为每个项目建立一个ArrayList,然后使用:

CatalogItem[] subArray = (CatalogItem) list.ToArray(typeof(CatalogItem));
orderedItems[index] = subArray;

将该列表转换为数组,并将其存储在“外部”数组中。

希望有所帮助 - 抱歉不能提供更完整的代码,但正如我所说,我不清楚你正在努力实现