我想要做的事情可能看起來像一個奇怪的場景。請記住,我需要爲Demo項目執行此操作,在該項目中,我向用戶輸出c#代碼,以教他們如何編寫某些控件。在C#中,從文本文件輸出代碼時排除類的好方法
我給了一個.cs文件,我需要輸出內容。文件中至少有一個類,最多...很多。我需要輸出整個文件,除了一種類型。我想防止輸出的類的具體類型都繼承了某個基類,所以它們應該很容易區分。
下面是一個例子:
public abstract class A{}
public class B{]
public class C{}
假定這些是基本類型的我的一些類可以繼承。我想阻止輸出從A繼承的所有類。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的回答後編輯:輸出應該與包含所有註釋的文件完全相同。
另一種編輯:與其回答某些軟件或庫可以做到這一點,我更喜歡算法。也許正則表達式?我對他們不太好,所以我不知道他們可以用來做什麼。
對代碼文件格式有任何保證嗎?比如所有匹配的{和}大括號都處於同一級別?即。你能找到「public class」的縮進,然後跳到匹配的},或者你可能冒險有類似你的第一個代碼示例中的類,即。一切都在一條線上? –
編碼指南有關於縮進的規範,但不能保證文件將被正確縮進(人們懶惰) – Yuf
爲什麼你需要輸出第二個文件?你想在這裏解決哪個問題? –