2

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

"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

更新

我想我只想通过 . 而且我认为这string.Romove()很好(任何其他方式都会欣赏)。但我不知道如何删除它?任何人帮助我

新更新:

我的实际工作是将 c# 语言代码转换为 vb.net 语言代码等。用户输入了类似字符串格式的代码。所以我想将字符串更改为 c# 代码。

4

2 回答 2

7

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

该示例称为“粘贴为 C#/VB”。它的代码将使您了解解决任务所需的交互。更准确地说,您要查找的代码位于项目Converting目录CSharpToVisualBasicConverterVisualBasicToCSharpConverter项目目录中。如果您有足够的时间深入研究,那么该代码是一本不错的读物。

作为注释,Roslyn 项目目前仅实现 C# 和 VB.NET 编译器,因此不会有“等语言”,因此您需要编写另一个语法树访问器和一个手写转换器。

于 2013-04-16T14:31:04.290 回答
1

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

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

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("'", "\"");
于 2013-10-25T15:34:53.557 回答