Console.WriteLine () выводит усеченные сообщения или в неправильном порядке / неполный - PullRequest
0 голосов
/ 21 января 2019

Ну, я не знаю, почему это происходит, но это выглядит любопытно, потому что я не нашел ничего подобного:

...

КакВы можете увидеть проверку всей строки, мы можем увидеть весь вывод, но в консоли он выглядит усеченным.Это то же самое, что:

...

Вы заметили это?Посмотрите на первые 4 строки.И посмотри в инспекторе.там отсутствуют некоторые tuple.Item1 и yuple.Item2.

Там, как вы видите, есть проблема с выбором LINQ.Но я не могу понять, почему это происходит.

...

Там вы можете увидеть весь код:

    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 - классы / интерфейсы, от которых он зависит, а третийЭлемент - это путь к файлу этого класса.

Примечание: Как видите, я также фильтрую пустые или пустые строки на tuple.Item1.

Я не знаю, что здесь происходит.Но это так странно, и я увидел это впервые.

РЕДАКТИРОВАТЬ:

Я смотрю на выходную высоту, как упомянуто в комментарии пользователя (в отношении: Есть ли ограничение на выход в окне консоли? ), и мой вывод превышает 9001:

...

1 Ответ

0 голосов
/ 21 января 2019
Имена классов

Game, MovieClip и SpriteTex имеют символ возврата каретки \r в конце. Попробуйте вызвать Trim() в GetGroupValue метод.

private static string GetGroupValue(Match m, string groupName)
{
    return m.Groups[groupName].Value.ToString().Trim();
}
...