Вы можете использовать \<
и \>
в регулярном выражении для соответствия в начале / конце слова.
grep ("\\<TH\\>", t1)
и т. д.
Хорошо, я появляюсь из сокрытия... Я использовал следующую программу для проверки то, что продолжалось и в то время как Marc указал что строка как этот "{0} {1} {2}... {2147483647}" следовал бы за пределом памяти 2 гибибайт, прежде чем список аргументов, мои результаты не соответствовали Вашим. Таким образом жесткий предел, количества параметров можно вставить строку. Вызов способа форматирования должен быть 107713904 .
int i = 0;
long sum = 0;
while (sum < int.MaxValue)
{
var s = sizeof(char) * ("{" + i + "}").Length;
sum += s; // pseudo append
++i;
}
Console.WriteLine(i);
Console.ReadLine();
Любовь люди обсуждения!
Подробно останавливаясь на подробном ответе Marc.
Единственное другое ограничение, которое важно, для отладчика. После того как Вы передаете определенное число параметров непосредственно к функции, отладчик становится менее функциональным в том методе. Я полагаю, что предел является 64 параметрами.
Примечание: Это не означает массива с 64 участниками, но 64 параметра передали непосредственно функции.
Вы могли бы смеяться и сказать, "кто сделает это?" который является, конечно, допустимым вопросом. Все же LINQ делает это намного легче, чем Вы думаете. Под капотом в LINQ компилятор генерирует много кода. Возможно, что для большого генерируют SQL-запрос, где больше чем 64 поля выбраны, что Вы поразили бы эту проблему. Поскольку компилятор под капотом должен был бы передать все поля конструктору анонимного типа.
Все еще угловой случай.
Не насколько я знаю...
хорошо, теоретический предел был бы пределом int32 для массива, но Вы поразили предел длины строки задолго до этого, я предполагаю...
Просто не сходят с ума с ним;-p может быть лучше записать много маленьких фрагментов в (например), файл или ответ, чем один огромный хит.
редактирование - это смотрело как был предел в IL (0xf4240), но по-видимому это не вполне, как это появляется; я могу заставить его стать довольно большим (2^24), прежде чем у меня просто закончится системная память...
<час>Обновление; мне кажется, что точка ограничения является строкой формата... они {1000001} {1000002}, складывают... быстрый бит математики (ниже), показывает, что максимум полезный количество аргументов, которые мы можем использовать, 206,449,129:
long remaining = 2147483647;// max theoretical format arg length
long count = 10; // i.e. {0}-{9}
long len = 1;
int total = 0;
while (remaining >= 0) {
for(int i = 0 ; i < count && remaining >= 0; i++) {
total++;
remaining -= len + 2; // allow for {}
}
count *= 10;
len++;
}
Console.WriteLine(total - 1);
Рассмотрение, что и предел класса Массива и Строковый класс являются верхним пределом Int32 (зарегистрированный в 2,147,483,647 здесь: Структура Int32 ), разумно полагать, что это значение является пределом числовой строки параметров формата.
Обновление После проверки отражателя, John прав. Строка. Формат, с помощью Красного Отражателя Логического элемента, показывает и следующие:
public static string Format(IFormatProvider provider, string format, params object[] args)
{
if ((format == null) || (args == null))
{
throw new ArgumentNullException((format == null) ? "format" : "args");
}
StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8));
builder.AppendFormat(provider, format, args);
return builder.ToString();
}
format.Length + (args.Length * 8)
части кода достаточно для уничтожения большей части того числа. Следовательно, '2,147,483,647 = x + 8x' оставляет нас с x = 238,609,294 (теоретическими).
Это - намного меньше, чем это, конечно; поскольку парни в комментариях упомянули, что строка, поражающая длину строки, ограничивает, ранее довольно вероятно.
, Возможно, кто-то должен просто кодировать это в проблему с машиной! :P