我如何从字符串创建一个Lambda表达式

本文关键字:一个 Lambda 表达式 字符串 创建 | 更新日期: 2023-09-27 18:09:40

我有一个字符串表达式像(这将是一个字符串)

"Func<int, string> myfunc = (var1 => (var1 == 0 ? 'ok' : var1 == 1 ? 'Running' : 'Fals'));"

我想将此表达式转换为有效的lambda表达式,如

Func<int, string> myfunc = (var1 => (var1 == 0 ? "ok" : var1 == 1 ? "Running" : "Fals"));

如何将字符串表达式解析为lambda

我想我只是想删除第一个和最后一个"(双引号)在c#代码通过。我认为string.Romove()是好的(任何其他方式将感激),但我不知道如何去除它?谁来帮帮我?

新更新:

我的实际工作是将c#语言代码转换为vb.net语言代码等。

我如何从字符串创建一个Lambda表达式

用户设置了一个类似字符串的代码格式,所以我想把字符串改为c#代码。

您应该能够将c#代码转换为VB。. NET来回使用Roslyn。它附带了一个示例项目,展示了如何在这两种语言之间执行转换。

示例名为"粘贴为c#/VB"。它的代码将使您了解解决任务所需的交互。更准确地说,您正在寻找的代码位于CSharpToVisualBasicConverterVisualBasicToCSharpConverter项目的Converting目录中。如果你有足够的时间去钻研,那这段代码是一篇很好的文章。

值得注意的是,Roslyn项目目前只实现c#和VB。. NET编译器,所以不会有"等语言",所以你需要编写另一个语法树访问器和一个手写的转换器。

我不确定我是否理解了这个问题,但我会试一试。

使用您的示例字符串,假设您只想删除前后双引号:

var vbString = "'"Func<int, string> myfunc = (var1 => (var1 == 0 ? 'ok' : var1 == 1 ? 'Running' : 'Fals'));'"";
var csString = vbString.Substring(1, vbString.Length - 2);

如果你还想用双引号替换单引号:

var vbString = "'"Func<int, string> myfunc = (var1 => (var1 == 0 ? 'ok' : var1 == 1 ? 'Running' : 'Fals'));'"";
var csString = vbString.Substring(1, vbString.Length - 2).Replace("'", "'"");

您也可以确保字符串在去掉它们之前被双引号括起来:

var vbString = "'"Func<int, string> myfunc = (var1 => (var1 == 0 ? 'ok' : var1 == 1 ? 'Running' : 'Fals'));'"";
var csString = vbString.StartsWith("'"") && vbString.EndsWith("'"") ? vbString.Substring(1, vbString.Length - 2).Replace("'", "'"") : vbString.Replace("'", "'"");