string s="abc_defg";
int ix = s.IndexOf('_');
s = ix != -1 ? s.Substring(ix + 1) : s;
Использование тернарного оператора здесь совершенно бесполезно, лучше написать:
s = s.Substring(ix + 1);
напрямую, используя тот факт, что Substring
, вероятно, оптимизирован для индекса случая == 0
Это то, что вы хотите?
НО кто-то предложил использовать пушки LINQ, поэтому
var temp = s.SkipWhile(p => p != '_').Skip(1);
s = temp.Any() ? new string(temp.ToArray()) : s;
В .NET 4.0 есть новый метод string.Concat
.
s = temp.Any() ? string.Concat(temp) : s;
(обратите внимание, что, как правило, способ LINQ медленнее и сложнее для чтения)
Я добавлю ультракилл: регулярные выражения !!!Существует школа мысли, что с помощью регулярных выражений можно сделать все что угодно ИЛИ jQuery!: -)
var rx = new Regex("(?:[^_]*_)?(.*)", RegexOptions.Singleline);
var res = rx.Match(s).Groups[1].Value;
Я даже не буду пытаться никому объяснить этого зверя, так что не спрашивайте.Это бесполезно.(и регулярное выражение и спросить :-))