У меня определено несколько стоковых констант, например:
SpecialChars = "<>:\"/\\|?*";
и есть набор статических методов вот такого вида:
public static bool In(this Char p_Char, string p_String);
public static char[] Without(this string p_String, params char[] p_Chars);
Это сделано просто для удобства, т.е. чтобы можно было написать, например, вот так:
if (p_Char.In( SpecialChars.Without( '\\' ) )) {}
Вышеприведённый код вызывается код огромное кол-во раз.
Возникло два вопроса:
1) Оптимизирует ли компилятор C# такие вызовы автоматически?
Сильно подозреваю, что нет — не оптимизирует.
Однако перегружать код предвычислениями или "промежуточными" константами не хочется — он от этого сложнее станет.
Поэтому возник второй вопрос:
2) Можно ли как-нибудь подсказать компилятору, что результат вызова функции Without() с одинаковыми параметрами всегда будет одинаковым (чистая функция)? Т.е. возможно ли заставить его это оптимизировать (хранить промежуточные значения)?