簡體   English   中英

如何將 C# 代碼行保存到字符串中?

[英]How can I save lines of C# code into a string?

我正在編寫一系列測試來驗證我正在編寫的代碼。 我希望測試文檔列出測試如何發現錯誤。 而不是確保文檔得到更新與測試我想 output 代碼行。 有沒有辦法將它保存在字符串中?

代碼如下所示:

string Date = String.Format("Name = {0}, hours = {1:hh}", name, DateTime.Now);
string Code = ""Name = {0}, hours = {1:hh}", name, DateTime.Now"

將評估Date ,而Code將是文字字符串。 就像是:

string Date = string.Format(Code);

我認為你最好使用服務來記錄它。但我仍然會給你一個解決方案。 您可以使用委托來記錄當前狀態(它是一個閉包),並且當您需要它時,您可以調用它並獲取它的返回值。 像這樣做:

using System;
namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            var john = new Producer();
            var log = john.Produce();
            Console.WriteLine($"John's log is \"{log()}\"");
        }
    }

    class Producer
    {
        public Func<string> Produce()
        {
            var name = "John";
            Console.WriteLine("John is producing.");
            return () =>
            {
                return $"Name = {name}, hours = {DateTime.Now:hh}";
            };
        }
    }
}

Output:

John is producing.
John's log is "Name = John, hours = 08"

我相信您可以使用新的C# 9.0 代碼生成器來做到這一點。 它們允許您進行自動代碼重寫,例如注入與您的用例類似的日志調用。

這是一本包含一些“代碼重寫”食譜的食譜:

https://github.com/dotnet/roslyn/blob/master/docs/features/source-generators.cookbook.md

我是代碼生成器的新手,它們仍處於預覽狀態(。)所以我不知道你想要的是否真的可能,但至少是檢查代碼並在每行基礎上增加它的一般想法(在你的通過從代碼行中創建一個字符串並執行它)看起來就像代碼重寫生成器可以用於什么。

暫無
暫無

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

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