Строка имеет сколько параметров

Перед использованием Строки. Формат к формату строка в C#, я хотел бы знать, сколько параметров, которые принимает строка?

Для, например, если бы строка была "{0}, не то же как {1}", я хотел бы знать, что эта строка принимает два параметра Для, например, если строка была "{0}, не то же как {1} и {2}", строка принимает 3 параметра

Как я могу найти это эффективно?

9
задан SilentGhost 28 January 2010 в 07:24
поделиться

3 ответа

Вы можете использовать STRTOX (где X - f f f l l ul для беззнаков. ), выбирая для того, что вы хотите. Один из параметров, которые вы даете, - это «конечный указатель», который указывает на первый символ в строке, который мог бы преобразовать , быть преобразован в тип целевого номера.

В вашем случае, что вы, по-видимому, в том, что конечный указатель должен быть в конце строки, указывая, что все символы в строке были преобразованы в тип целевого значения.

Редактировать: Извините, не заметил, что вы упомянули «двойной» в заголовке (но не сам вопрос). Что бы то ни было бы дело, вы бы использовали Strtod , как также посоветовали пару других.

-121--3777346-

String.Format Прибирает строковый аргумент с форматом значение и объектом объекта Params [] Array, который может иметь дело с произвольным Большие значения элементов.

Для каждого объекта это метод .TOSTRING () будет призвано к решению этой структуры формата

Редактировать: кажется, что я неправильно раскрыл ваш вопрос. Если вы хотите узнать, сколько аргументов необходимы для вашего формата, вы можете обнаружить, что, используя регулярное выражение:

string pattern = "{0} {1:00} {{2}}, Failure: {0}{{{1}}}, Failure: {0} ({0})";
int count = Regex.Matches(Regex.Replace(pattern, 
    @"(\{{2}|\}{2})", ""), // removes escaped curly brackets
    @"\{\d+(?:\:?[^}]*)\}").Count; // returns 6

AS Benjamin , отмеченных в комментариях, может быть, вам нужно знать номер Разные ссылки. Если вы не используете LINQ, здесь вы идете:

int count = Regex.Matches(Regex.Replace(pattern, 
    @"(\{{2}|\}{2})", ""), // removes escaped curly brackets
    @"\{(\d+)(?:\:?[^}]*)\}").OfType<Match>()
    .SelectMany(match => match.Groups.OfType<Group>().Skip(1))
    .Select(index => Int32.Parse(index.Value))
    .Max() + 1; // returns 2

Это также адрес @ 280Z28 Последняя проблема.

Редактировать на 280Z28: это не проверяет вход, но для любого допустимого ввода даст правильный ответ:

int count2 =
    Regex.Matches(
        pattern.Replace("{{", string.Empty),
        @"\{(\d+)")
    .OfType<Match>()
    .Select(match => int.Parse(match.Groups[1].Value))
    .Union(Enumerable.Repeat(-1, 1))
    .Max() + 1;
7
ответ дан 3 November 2019 в 02:51
поделиться

Вам придется анализировать через строку и найти наибольшее целочисленное значение между {} ... затем добавьте один.

... или подсчитайте количество наборов {} .

В любом случае, это уродливо. Мне было интересно узнать, почему вы должны быть в состоянии понять этот номер программно.

Отредактируйте

Как упоминалось 280Z28, вам придется объяснить различные идентификации того, что можно включить между {} (несколько {} , форматирование строк и т. Д.).

1
ответ дан 3 November 2019 в 02:51
поделиться

Поскольку многие приложения жестко закодировали имя каталога System32 в пути, MS поместила 64-разрядные системные файлы туда, а не в каталог "System64". 32-разрядные версии теперь идут в каталог 'SysWOW64' (это довольно запутанно). но для предотвращения разрыва 32-разрядных программ система выполняет перенаправление по умолчанию для 32-разрядных процессов, пытающихся получить доступ к каталогу "System32". В большинстве случаев при попытке 32-разрядного приложения получить доступ к% windir %\System32 доступ перенаправляется в% windir %\SysWOW64.

Простой способ обойти это перенаправление - использовать % windir %\Sysnative вместо% windir %\System32. Win64 перенаправит этот каталог в фактический каталог System32.

Для полного отключения этого перенаправления можно использовать API Wow64DisableWow64FsRedirection () . Для получения дополнительной информации см. http ://msdn.microsoft.com/en-us/library/aa384187.aspx .

-121--2691978-

C-M-i ; настройка не требуется.

-121--2801477-

Я полагаюсь на ReSharper, чтобы проанализировать это для меня, и жаль, что Visual Studio не поставляется с такой аккуратной функцией.

1
ответ дан 3 November 2019 в 02:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: