Как объявлять и обрабатывать динамические списки списков в C # 1.1 - PullRequest
0 голосов
/ 01 апреля 2012

У меня есть пользовательский класс с именем 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 и generics не существует

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 Ответ

5 голосов
/ 01 апреля 2012

В .NET 1.1 вам в основном нужно было бы использовать ArrayList, где каждый элемент равен ArrayList, если вы хотите «полностью» динамические размеры. Это боль, и она требует повсеместного чтения, но такова жизнь.

В этом случае я не уверен, что вам это действительно нужно - не совсем понятно, что вы пытаетесь сделать, но если вы на самом деле знаете размер «внешнего» массива, вы могли бы просто создайте ArrayList для каждого элемента, затем используйте:

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

чтобы преобразовать этот список в массив и сохранить его во "внешнем" массиве.

Надеюсь, что это помогает - извините, что не могу дать более полный код, но, как я уже сказал, мне не ясно, чего именно точно вы пытаетесь достичь.

...