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

apa*_*cay 0 c# .net-1.1 visual-studio-2003

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

基于这些元素的一个属性,必须组装该方法返回的矩阵.

public CatalogItem[][] ReorderCatalogItems(CatalogItem[] items)
Run Code Online (Sandbox Code Playgroud)

属性

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
Run Code Online (Sandbox Code Playgroud)

但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++;
    }
}
Run Code Online (Sandbox Code Playgroud)

@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>
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

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

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

CatalogItem[] subArray = (CatalogItem) list.ToArray(typeof(CatalogItem));
orderedItems[index] = subArray;
Run Code Online (Sandbox Code Playgroud)

将该列表转换为数组,并将其存储在"外部"数组中.

希望有所帮助 - 抱歉不能提供更完整的代码,但正如我所说,我不清楚究竟想要实现什么.