【问题标题】:How i can create a Lambda expression from a string [closed]我如何从字符串创建 Lambda 表达式 [关闭]
【发布时间】:2023-03-20 18:35:01
【问题描述】:

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

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

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

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

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

更新

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

新更新:

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

【问题讨论】:

  • 这不是小事。是什么在创建字符串?用户可以输入任何内容吗?
  • 你的实际目标是什么?可能有更直接的方法来完成它。
  • 我发布了一个答案。不知道我最终成为了评论。不过感谢您提供的信息,它很有用。
  • @RameshRams:如果您只是从字符串中删除了",那么您最终会得到一个字符串,而不是可以调用的Func&lt;int, string&gt;。这里的答案是关于从字符串中获取该函数。要删除",只需执行MyString = MyString.Trim('"');
  • 好的,基本上这是字符串操作。我们都搞错了,因为您说过要将字符串转换为“lambda”,您似乎想要的是一个包含 C# 代码的字符串来制作 lambda。这仍然不是微不足道的。我已经发布了代码(在上面的评论中)来解决这个特定情况,但不是一般情况。

标签: c# string


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    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("'", "\"");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多