Я столкнулся с той же проблемой и был обеспокоен влиянием на производительность вызова IsPunctuation для каждой отдельной проверки.
Я нашел это сообщение: http://www.dotnetperls.com/char-ispunctuation.
Через строки: char.IsPunctuation также обрабатывает Unicode поверх ASCII.
Метод сопоставляет группу символов, включая управляющие символы. По определению, этот метод тяжелый и дорогой.
Суть в том, что я, наконец, не пошел на это из-за влияния производительности на мой процесс ETL.
Я пошел за пользовательскую реализацию dotnetperls.
И только что, к вашему сведению, вот код, полученный из предыдущих ответов для получения списка всех знаков препинания (кроме контрольных):
var punctuationCharacters = new List<char>();
for (int i = char.MinValue; i <= char.MaxValue; i++)
{
var character = Convert.ToChar(i);
if (char.IsPunctuation(character) && !char.IsControl(character))
{
punctuationCharacters.Add(character);
}
}
var commaSeparatedValueOfPunctuationCharacters = string.Join("", punctuationCharacters);
Console.WriteLine(commaSeparatedValueOfPunctuationCharacters);
Ура,
Andrew