[英]extending c# syntax with roslyn
我試圖在沒有else的情況下實現“return if”/“return value if”,因為我只想在條件有效時返回或返回值。
我知道,有if (condition) return;
或者if (condition) return value;
但是我希望代碼更清晰一點,因為它更具可讀性,所以擁有這種語法會很好。
我聽說過roslyn這是可能的,並在這里回答問題: 有沒有辦法在C#中實現自定義語言功能? 但我不知道如何實現它。
所以代碼將是這樣的:
public class Testclass
{
public static void Main(String[] args)
{
Testclass t = new Testclass();
t.TestMyClassWithVoid();
bool success = t.TestMyClassWithInt(3) == 3;
bool fail = t.TestMyClassWithInt(2) == 2;
}
public void TestMyClassWithVoid()
{
int value = GetValueFromSomeWhere();
return if value == 3;
DoSomeOtherStuffSinceValueIsNotThree();
}
public int TestMyClassWithInt(int value)
{
return value if value == 3;
DoSomeOtherStuffSinceValueIsNotThree();
return -1;
}
}
任何想法我怎么能解決這個問題? 我開始嘗試使用Roslyn.Compilers.CSharp
-namespace,但我不知道如何開始實現。
如果你可以為此生成正確的IL,這應該是有效的。 因為這不是一個新的CLR功能,所以你不需要使用dot net core做任何事情,只需要Roslyn。
要做到這一點,你有兩個選擇,
一種是按原樣保留Roslyn並將新語法重寫為相應的C#語法,然后按常規編譯。
第二種選擇,因為Roslyn是一個開源的,就是添加了將新語法編譯到自己的Roslyn並使用它編譯代碼的能力。
這是一個替代建議,可能適用於正在尋找擴展點到roslyn的人。 它甚至可以作為nuget包提供! 為您的語法創建分析器和代碼修復提供程序。
基本上你會得到的是你選擇的任何語法下的紅色波浪形線,帶有自動修復提示,可以讓你將它轉換為常規的C#等價物。
它還可以用於驗證庫的使用情況,檢查正確的屬性是否在正確的位置,檢測常見的代碼異味等。
在這篇文章中閱讀有關代碼分析器的更多信息: https : //msdn.microsoft.com/en-us/magazine/dn879356.aspx
該鏈接的快速摘要(但絕不是替代):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.