我正在编写一系列测试来验证我正在编写的代码。我想要测试的文档列出测试是如何发现错误的。我希望输出这行代码,而不是确保文档随测试更新。有没有办法把它保存在字符串中?
代码看起来像:
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}";
};
}
}
}
输出:
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
我是代码生成器的新手,它们仍在预览中(!(,所以我不知道你想要的是否真的可能,但至少检查代码并在每行的基础上扩充它(在你的情况下,通过从代码行中生成一个字符串并执行它(的总体想法看起来像是代码重写生成器的用途。