Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq解析样式属性集合_C#_.net_Linq_Collections_Projection - Fatal编程技术网

C# 使用linq解析样式属性集合

C# 使用linq解析样式属性集合,c#,.net,linq,collections,projection,C#,.net,Linq,Collections,Projection,我想解析一个SVG样式的属性,它只是一个分隔字符串,例如 “填充:#e2b126;笔划:#010101;笔划宽度:0.3177;笔划斜接限制:10” 放入字典,以便我可以对其执行一些处理 这就是我所拥有的,它完成了这项工作,但我想使用linq投影使它更整洁,只是似乎无法获得语法。我尝试使用.Select().ToDictionary等,但没有乐趣。谢谢: string attributes = "fill:#e2b126;stroke:#010101;stroke-width:0.3177;st

我想解析一个SVG样式的属性,它只是一个分隔字符串,例如

“填充:#e2b126;笔划:#010101;笔划宽度:0.3177;笔划斜接限制:10”

放入
字典
,以便我可以对其执行一些处理

这就是我所拥有的,它完成了这项工作,但我想使用linq投影使它更整洁,只是似乎无法获得语法。我尝试使用.Select().ToDictionary等,但没有乐趣。谢谢:

string attributes = "fill:#e2b126;stroke:#010101;stroke-width:0.3177;stroke-miterlimit:10";
var pairs = attributes.Split(';').ToList();
var dic = new Dictionary<string, string>();
pairs.ForEach(p =>
    {
        var pair = p.Split(':');
        dic.Add(pair[0], pair[1]);
    });
 foreach (var k in dic.Keys)
 {
       Console.WriteLine(k + " " + dic[k]);
 }
试试下面的方法

string attributes = "fill:#e2b126;stroke:#010101;stroke-width:0.3177;stroke-miterlimit:10";
var map = attributes
  .Split(new []{';'}, StringSplitOptions.RemoveEmptyEntries)
  .Select(x => x.Split(new []{':'}, StringSplitOptions.RemoveEmptyEntries))
  .ToDictionary(p => p[0], p => p[1]);
崩溃


第一个
Split
调用将返回一个
String
值数组,其中每个条目都采用
key:value
格式。下面的
Select
调用将这些条目中的每一个转换为
string[]
,其中第一个元素是键,第二个是值。
ToDictionary
调用只是明确地执行了这个映射

谢谢-正是我想要的,遗憾的是没有使用单个
字符的
.Split()
重载。感觉很自然,我经常忘记它不存在(因此我对这个答案进行了几次编辑:(),除了这样一个版本存在(假设您不关心
StringSplitOptions
):
“在空格上拆分我”。拆分(“”);
会很好地工作(请参阅)@dlev很好的观点,对于这样的情况,虽然我倾向于使用
removemptyoptions
,只是为了安全起见。@JaredPar我同意,他大部分都是迂腐的:)老实说,我认为API设计师认为参数放置的一致性比拥有一个可用的API更重要(当然,
params
参数必须是最后一个参数,而且上天禁止您在分隔符之前指定选项…)
string attributes = "fill:#e2b126;stroke:#010101;stroke-width:0.3177;stroke-miterlimit:10";
var map = attributes
  .Split(new []{';'}, StringSplitOptions.RemoveEmptyEntries)
  .Select(x => x.Split(new []{':'}, StringSplitOptions.RemoveEmptyEntries))
  .ToDictionary(p => p[0], p => p[1]);