簡體   English   中英

用roslyn擴展c#語法

[英]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

該鏈接的快速摘要(但絕不是替代):

  • 安裝VS SDK,Roslyn SDK,編譯器平台SDK
  • 創建新項目:Analyzer with Code Fix(NuGet + VSIX)模板。
  • 關於如何創建分析器/代碼修復提供程序,將有3個示例
  • 將VSIX項目設置為啟動項目並運行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM