我如何从字符串创建一个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语言代码等。
您应该能够将c#代码转换为VB。. NET来回使用Roslyn。它附带了一个示例项目,展示了如何在这两种语言之间执行转换。
示例名为"粘贴为c#/VB"。它的代码将使您了解解决任务所需的交互。更准确地说,您正在寻找的代码位于CSharpToVisualBasicConverter
和VisualBasicToCSharpConverter
项目的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("'", "'"");