Люди утверждают, что нельзя удалить из коллекции, которая повторяется в цикле foreach. Я просто хотел указать, что это технически неверно и точно описывает (я знаю, что вопрос OP настолько продвинут, чтобы избежать этого, чтобы понять это) код, лежащий в основе этого предположения:
for (TouchableObj obj : untouchedSet) { // <--- This is where ConcurrentModificationException strikes
if (obj.isTouched()) {
untouchedSet.remove(obj);
touchedSt.add(obj);
break; // this is key to avoiding returning to the foreach
}
}
Не исключено, что вы не сможете удалить из итерированного Colletion
, а затем продолжить, после чего продолжить. Следовательно, break
в коде выше.
Извиняется, если этот ответ является несколько специализированным прецедентом и более подходит для исходного потока , из которого я пришел сюда, отмеченный как дубликат (несмотря на то, что этот поток выглядит более нюансированным) этого и заблокирован.
Согласно репозиторию dotnet corefx github, эта функция не поддерживается в .NET Core, и в настоящее время нет планов ее реализации. Более подробную информацию можно найти здесь здесь
К сожалению, похоже, что пока вы можете только придерживаться .NET Framework.
РЕДАКТИРОВАТЬ
Мне нравится вызов, поэтому я поиграл с вашим XSLT и нашел решение, которое будет работать в .NET Core.
Нам нужно удалить JScript, чтобы избавиться от этой ошибки. Поэтому нам нужно заменить ваши методы JScript на методы XSLT.
Чтобы удалить replace-str
, я оглянулся и нашел шаблон XSLT, который заменит вам строку. Это ответ , который я использовал
Добавьте шаблон в свой XSLT
<xsl:template name="string-replace-all">
<xsl:param name="text" />
<xsl:param name="replace" />
<xsl:param name="by" />
<xsl:choose>
<xsl:when test="contains($text, $replace)">
<xsl:value-of select="substring-before($text,$replace)" />
<xsl:value-of select="$by" />
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text" select="substring-after($text,$replace)" />
<xsl:with-param name="replace" select="$replace" />
<xsl:with-param name="by" select="$by" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
и замените ваши replace_str
вызовы примером из ответа
Теперь вашим предложениям when
не нужна функция JScript identify_bin_type
для поиска совпадений, вы можете использовать метод XSLT contains
, чтобы найти совпадения для вас:
<xsl:when test="contains($Pass_Bin_Codes, $relevant-part)">
[1119 ] Это должно дать требуемый результат.