是否有 C# 相当于 pythons ast.literal_eval 函数

Is there a C# equivalent to pythons ast.literal_eval function

我是 C# 的新手,正在寻找一种方便的方法将编码为字符串的数组转换回 C# 中的数组。例如,将字符串“[1.2,24.4,35.5,4.5]”转换为浮点数组

import ast
ast.literal_eval("[1.2,24.4,35.5,4.5]")
[1.2, 24.4, 35.5, 4.5]

或字符串“["foo",123,[1,2,3]]”

ast.literal_eval("[\"foo\",123,[1,2,3]]")
['foo', 123, [1, 2, 3]]

您提供的浮点数组可以解释为JSON。您可以使用 JSON.NET 或您首选的 JSON 序列化程序将其反序列化为 C# 中的数组。

JSON.NET:

float[] myArray = JsonConvert.DeserializeObject<float[]>("[1.2,24.4,35.5,4.5]");

System.Text.Json:

float[] myArray = JsonSerializer.Deserialize<float[]>("[1.2,24.4,35.5,4.5]");

如果你不打算实现一个更通用的表达式解释器 复杂的。 你可以用正则表达式和一些 linq expression.It 来做,也许最简单。 代码如下:

using System;
using System.Linq;
using System.Text.RegularExpressions;

namespace StringToArray
{
    class Program
    {
        static void Main()
        {
            string testString = "[1.2, 24.4, 35.5, 4.5]";
            // It rough mean that have some digit and maybe have comma and some digit after comma.that repeat many times.
            var array = Regex.Matches(testString, @"(\d+\.?\d*)+") 
                .Select(group => Convert.ToDouble(group.Value)) // Get digit string and convert to double
                .ToArray(); // Get float array
            foreach (var value in array)
            {
                Console.WriteLine(value); // Output: 1.2, 24.4, 35.5, 4.5
            }
        }
    }
}