Вы пропустили тот факт, что Except
- это операция set . Другими словами, он дает последовательность, которая не содержит дубликатов. (По общему признанию документация могла бы быть намного более ясной в этом пункте.)
Вы хотите:
var validName = _name.Where(c => !invalids.Contains(c)).ToArray();
Обратите внимание, что вам не нужно вызывать _name.ToCharArray()
, поскольку string
уже реализует IEnumerable<char>
. Другими словами, вы можете использовать:
public static string GetValidFilename(string fileNameCandidate)
{
var invalids = Path.GetInvalidFileNameChars();
var validName = fileNameCandidate.Where(c => !invalids.Contains(c))
.ToArray();
return new string(validName);
}