有一个字符串具有以下键值对。它被分隔为“,”因此将它拆分后。
string[] strSubject = certificate.Subject.Split(',');
[0] "E=ankurda@aol.com"
[1] " CN=Ankur"
[2] " OU=Telco"
[3] " O=aol"
[4] " L=Mum"
[5] " S=Mh"
[6] " C=IN"
该值是键值对的组合,键名已修复。问题是并不是必须拥有所有对象的所有键。 对于某些对象来说它意味着它将具有一些值,例如
[0] "E=ankurda@aol.com"
[1] " CN=Ankur"
[2] " S=Mh"
[3] " C=IN"
因此,我无法对索引进行硬编码,并通过执行此类操作来获取值
String value = strSubject[5].Replace("S=",string.Empty));
我尝试过像这样使用.contains
if (strSubject.Contains("C="))//Don't Know the value part as it is dynamic
{
//this does not work
}
如何获取分割后存在的键的值。 Linq查询可以获取不确定的值。
答案 0 :(得分:2)
创建一个字典并查询:
var testStr = "E=foo,B=Bar,O=aol,FAIL";
var dict = testStr.Split(',').Where(x => x.Contains("="))
.Select(x => x.Trim().Split('=')).ToDictionary(x => x[0], x=> x[1]);
dict.ContainsKey("theKey");
(这也为您提供了一种处理查询的便捷方式。)
答案 1 :(得分:2)
你应该做的是将字符串解析为类似Dictionary<string, string>
的字符串,使用它会更容易。
类似的东西(假设需要,
之后的空格):
var subjectDictionary = certificate.Subject
.Split(new[] { ", " }, StringSplitOptions.None)
.Select(pair => pair.Split('='))
.ToDictionary(pair => pair[0], pair => pair[1])
if (subjectDictionary.ContainsKey("C"))
{
var valueForC = subjectDictionary["C"];
…
}
答案 2 :(得分:1)
我想这样的事情应该有效..
string[] strSubject = certificate.Subject.Split(',');
for (int i = 0; i < strSubject.Length; i++)
{
string[] row = strSubject[i].Split('=');
switch (row[0]) // the key
{
case "E":
// do something, value is stored in row[1]
break;
case "CN":
// do something else
break;
//... cover the expected keys
}
}
答案 3 :(得分:0)
我想使用yourWord.IndexOf(inputString) != 0
所以使用System.Linq
var match = yourWords.ToList().FirstOrDefault(x => x.ToLower().IndexOf(inputString) != 0);
但是有很多其他方法可以做到这一点。选择你的最爱!
答案 4 :(得分:0)
for(var i=0;i<strSubject.Length;i++)
{
if(strSubject[i].Trim().StartsWith("C="))
{
//perform your action
}
}
答案 5 :(得分:0)
尝试获取所有键和值:
var q = certificate.Subject.Split(',')
.Select(x => x.Trim())
.Select(x => new
{
key = x.Substring(0, x.IndexOf('=')).Trim(),
value = x.Substring(x.IndexOf('=') + 1).Trim()
});
然后:
foreach (var x in q)
{
if (x.key == "C")
{
// code
}
}
答案 6 :(得分:0)
我不确定你的目标究竟是什么,但是如果再次使用'='作为分隔符进行拆分会怎么样:
string[] strParts = theValue.Split("=");
分别拥有strParts[0]
和strParts[1]
中的密钥和值。
答案 7 :(得分:0)
要获取值,只需使用以下代码行:
var values = strSubject.Select(v => v.Split('=')[1]);
对于键和值:
var values = strSubject.Select(v => new { Key = v.Split('=')[0], Value = v.Split('=')[1] });
答案 8 :(得分:0)