Console.WriteLine() выводит усеченные сообщения или в неправильном порядке / неполный
Ну, я не знаю, почему это происходит, но это выглядит любопытно, потому что я не нашел ничего подобного:
Как вы можете видеть, просматривая полную строку, мы можем видеть весь вывод, но в консоли он выглядит усеченным. Такой же как:
Вы это замечаете? Посмотрите на первые 4 строки. И посмотри в инспекторе. там отсутствуют некоторые tuple.Item1
а также yuple.Item2
,
Там вы можете увидеть проблему на LINQ select. Но я не могу понять, почему это происходит.
Там вы можете увидеть весь код:
private const string ClassName = "ClassName",
InheritedClass = "InheritedClass";
private static void Main(string[] args)
{
var files = Directory.GetFiles(StaticPath, "*.cs", SearchOption.AllDirectories);
var classes = files.Select(file => GetClassesInFile(file)).SelectMany(c => c).ToList();
string fullMsg = string.Join(Environment.NewLine, classes.Select(tuple => $"{tuple.Item1}{(tuple.Item2.HasContent(string.Empty, " ") ? " : " + string.Join(", ", tuple.Item2) + " " : " ")}(on {Path.GetFileName(tuple.Item3)})"));
Console.WriteLine(fullMsg);
var unsealedClasses = classes.Where(c => !classes.Any(subClass => subClass.Item2.Contains(c.Item1))).ToList();
string msg = $"Unsealed classes count: {unsealedClasses.Count} ({string.Join(", ", unsealedClasses.Select(c => c.Item1))})";
Console.WriteLine(msg);
Console.Read();
}
private static IEnumerable<Tuple<string, string[], string>> GetClassesInFile(string file)
{
return Regex.Matches(File.ReadAllText(file), $"(public|internal|private) class (?<{ClassName}>(.+?))( : (?<{InheritedClass}>(.+?))|)\n")
.Cast<Match>()
.Select(m => new Tuple<string, string[], string>(GetGroupValue(m, ClassName), GetGroupValue(m, InheritedClass).CleanLineBreak().Split(','), file))
.Where(t => !string.IsNullOrEmpty(t.Item1));
}
private static string GetGroupValue(Match m, string groupName)
{
return m.Groups[groupName].Value.ToString();
}
GetGroupValue
выводит строку из индексатора группы Regex.GetClassesInFile
выводит IEnumerable из Tuple, где Item1 - имя класса, Item2 - классы / интерфейсы, от которых он зависит, а третий Item - путь к файлу этого класса.
Примечание. Как видите, я также фильтрую пустые или пустые строки в tuple.Item1
,
Я не знаю, что здесь происходит. Но это так странно, и я увидел это впервые.
РЕДАКТИРОВАТЬ:
Я смотрю на высоту вывода, как указано в комментарии пользователя (в отношении: Есть ли ограничение на вывод Консольного окна?), И мой вывод превышает 9001:
1 ответ
Game
, MovieClip
а также SpriteTex
имена классов имеют символ возврата каретки \r
в конце. Попробуй позвонить Trim()
в GetGroupValue
метод.
private static string GetGroupValue(Match m, string groupName)
{
return m.Groups[groupName].Value.ToString().Trim();
}