是否有 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
}
}
}
}
我是 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
}
}
}
}