То, что я хочу сделать, может показаться странным сценарием.Пожалуйста, имейте в виду, что мне нужно сделать это для демонстрационного проекта, где я выводю код c # для пользователя, чтобы научить его, как кодируются определенные элементы управления.
Мне дан файл .cs, и мне нужно вывестисодержимое.В файле есть как минимум один класс, и самое большее ... много.Мне нужно вывести весь файл, за исключением одного типа класса.Конкретный тип класса, который я хочу предотвратить выводом, все наследуют определенный базовый класс, поэтому их должно быть легко различить.
Вот пример:
public abstract class A{}
public class B{]
public class C{}
Предположим, что этобазовые типы, которые могут наследовать некоторые из моих классов.Я хочу запретить вывод всех классов, которые наследуются от A. Вероятно, это будет единственный абстрактный базовый класс, так что если это может помочь в любом случае, это было бы здорово.
Допустим, мне дали файл, example.cs:
using System;
using OtherStuff;
namespace blah.blahagain.someotherblah
{
[AttributeOne]
[AttributeTwo]
[AttributeThree]
public class AA: A
{
//stuff
}
public class BB: B
{
//stuff
}
public class CC: C
{
//stuff
}
public class D
{
//stuff
}
}
И результат должен быть
using System;
using OtherStuff;
namespace blah.blahagain.someotherblah
{
public class BB: B
{
//stuff
}
public class CC: C
{
//stuff
}
public class D
{
//stuff
}
}
Единственный способ, которым я придумал, - это манипулирование грубой силой.Однако я не могу использовать пробелы в качестве разделителя между классами, потому что нет никакой гарантии, что между классами будет даже пробел.Мне нужно будет отслеживать открытые и закрытые фигурные скобки, чтобы узнать, где начинается один класс, а другой заканчивается.Мне также нужно проверить базовый класс каждого класса, проверяя строковые токены перед первой парой {}.
Также мне нужно предотвратить вывод атрибутов AA тоже.
Так какЕсть много ярких умов, я здесь, чтобы спросить, есть ли другой простой / понятный метод для выполнения того, что мне нужно.
Спасибо за чтение!
Редактировать после ответа YetAnotherUser: Выводдолжен быть точно таким же, как файл, который включает в себя все комментарии.
Другое редактирование: вместо ответа определенным программным обеспечением или библиотеками, которые могут это сделать, я бы больше предпочел алгоритмы.Может быть, регулярные выражения?Я не очень хорошо с ними отношусь, поэтому не знаю, для чего они могут быть использованы.