Вот пять способов, как это можно сделать. Компилируется ли код - не проверял
Возможно, самый медленный способ
foreach (var punctuationMark in punctuation_marks)
{
str = str.Replace(punctuationMark, "");
}
Способ через string.Split/Join
str = string.Join("", str.Split(punctuation_marks, StringSplitOptions.RemoveEmptyEntries));
Через StringBuilder. Проверка что это знак пунктуации идёт через char.IsPunctuation, возможно, это не то, что надо
StringBuilder sb = new StringBuilder();
foreach (var c in str.ToCharArray())
{
if (!char.IsPunctuation(c)) sb.Append(c);
}
Еще через StringBuilder. Тут проверка идёт по вашему массиву
StringBuilder sb = new StringBuilder();
foreach (var c in str.ToArray())
{
if (punctuation_marks.All(p=>p != c.ToString())) sb.Append(c);
}
С помощью регулярного выражения
var regexp = new Regex(@"/\.,;:]\[<>\{}\|!\?");
regexp.Replace(str, "");