Получить последний элемент в цикле
for (int ixIdx = 0; ixIdx < tblAttributes.Count; ixIdx++)
{
bool Exclude = ExcludeColumn(tblAttributes[ixIdx].Name);
bool Primary = Primary(tblAttributes[ixIdx].Name);
if (Exclude || Primary)
{
continue;
}
else
{
#> [<#= tblAttributes[ixIdx].MdlPart.InternalName #>]<#= ixIdx == tblAttributes.Count-1 ? "" : "," #>
<# }
}
в приведенном выше коде находится в текстовом файле. все, что я пытаюсь сделать, это сгенерировать запятую для каждого элемента списка tblAttributes, которые входят в else, и остановить запятую в последнем элементе списка.....
Проблема в том, что мое состояние в другом случае, когда оно применяется, но после этого последние элементы попадают в блок if, поэтому он никогда не останавливает создание запятой. так что есть ли возможность найти последний элемент, который приходит в блок else.... чтобы сделать это...
или есть ли обходной путь для всего процесса плз.... спасибо........
2 ответа
Для вашей проблемы с запятыми, вы можете сделать это следующим образом:
string res = "";
for(int i = 0; i < list.Count - 1; i++)
res += list[i] + ", ";
if (list.Count > 0) res += list[list.Count - 1];
в вашем конкретном случае (поскольку не каждый элемент добавляется в вашу строку):
string res = "";
int i = 0;
while (i < tblAttributes.Count && (ExcludeColumn(tblAttributes[i].Name) || (Primary(tblAttributes[i].Name)))
i++;
if (i < tblAttributes.Count) res += tblAttributes[i].Name;
for (; i < tblAttributes.Count; i++)
{
if (!ExcludeColumn(tblAttributes[i].Name) && !(Primary(tblAttributes[i].Name))
res += ", " + tblAttributes[i].Name;
}
таким образом, вы добавляете запятую только в том случае, если у вас есть другой элемент, который нужно добавить в полученную строку. Если нет элементов, соответствующих вашему условию, строка будет пустой. Если есть только один, ваша строка не будет иметь запятую в конце. Если имеется более одного элемента, вы помещаете запятую перед добавлением нового элемента, поэтому не рискуете, что ваша строка также заканчивается запятой.
Простая вещь, которую вы могли бы сделать, это
Выполните итерацию списка в цикле for и поместите элементы, которые удовлетворяют вашим условиям, в новый список, а затем итерируйте новый список, чтобы вы могли использовать простую логику ниже, чтобы прекратить генерировать запятую в конце последнего элемента нового списка в петля.
for(int i = 0; i < newlist.Count; i++)
{
<#= newlist[i] #><#= i == newlist.Count - 1 ? "" : "," #>
}
это будет делать спасибо..........