Попробуйте что-то вроде этого;
string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?";
string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
foreach (char c in invalid)
{
illegal = illegal.Replace(c.ToString(), "");
}
Но я должен согласиться с комментариями, вероятно, я бы попытался разобраться с источником нелегальных путей, а не пытаться превратить нелегальный путь в законный, но, вероятно, непреднамеренный.
Редактировать: Или потенциально «лучшее» решение с использованием регулярных выражений.
string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?";
string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
illegal = r.Replace(illegal, "");
Тем не менее, возникает вопрос, почему вы делаете это в первую очередь.