Как объявлять и обрабатывать динамические списки списков в C# 1.1
У меня есть пользовательский класс с именем 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).
У меня есть это, так как список и дженерики не существует
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++;
}
}
@ Редактировать: о для дальнейшего понимания, это моя настоящая и последняя цель: создать 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 ответ
В.NET 1.1 вам в основном придется использовать ArrayList
где каждый элемент является ArrayList
если вы хотите "полностью" динамические размеры. Это боль, и она включает в себя кастинг повсюду, но такова жизнь.
В этом случае я не уверен, что вам это действительно нужно - не совсем понятно, что вы пытаетесь сделать, но если вы действительно знаете размер "внешнего" массива, вы можете просто создать ArrayList
для каждого элемента, затем используйте:
CatalogItem[] subArray = (CatalogItem) list.ToArray(typeof(CatalogItem));
orderedItems[index] = subArray;
преобразовать этот список в массив и сохранить его во "внешнем" массиве.
Надеюсь, это поможет - извините, что не могу дать более полный код, но, как я уже сказал, мне не ясно, чего именно вы пытаетесь достичь.