我如何连接List <string>中的字符串,同时格式化?</string>

时间:2014-11-28 03:59:48

标签: c# string ldap domaincontroller

我写的代码工作得很好,这个查询纯粹是出于教育目的。我想知道其他人如何做得更好,更干净。我特别讨厌在加入之前将列表项添加到另一个列表中的方式..........必须有一种更有效的方式。

我意识到一个简单的方法就是将这个简单存储起来&#34; OU =&#34;和&#34; DC =&#34;在数据库及其相关文本中,.....但这对我来说感觉不合适。

我正在构建一个用于LDAP调用的PrincipalContext类的容器参数的字符串。

&#34; lst&#34; List&lt; string&gt; 包含LDAP组织单位的数据行,例如&#34;帐户&#34;,&#34;用户&#34;等

// Get ou list
List<string> lst = db.sda(sql).Rows.OfType<DataRow>().Select(dr => dr.Field<string>("txt")).ToList()

string OU = string.Empty;
List<string> lst = new List<string>();

foreach (string ou in Web.Info.Ldap.ouList)
{
    lst.Add("OU=" + ou);                    //  6th revision .... this works, but wasn't as good as I thought it should be
    lst.Add(string.Format("OU={0}", ou));   //  7th revision .... this works as well, but I thought it could be done better, which is why I am here.
}
OU = string.Join(",", lst);                 //  born of 6th revision, used in 7th also 

结果:&#34; OU =用户,OU =帐户,OU =员工&#34;

我对名为dcList的列表执行相同的操作,该列表生成相同类型的字符串

DC = string.Join(",", lst); 

结果:&#34; DC = severname,DC = another_value,DC = com&#34 ;;

我和OU一起加入以获得完整的字符串,就像这样

string container = string.Join(",", OU, DC);

最终结果:&#34; OU =用户,OU =帐户,OU =员工,DC =服务器,DC =其他值,DC = com&#34;

感谢您的时间和知识。

2 个答案:

答案 0 :(得分:0)

您可以使用带有string.Join()参数的IEnumerable<string>重载:

OU = string.Join(",",
    Web.Info.Ldap.ouList.Select(text => string.Format("OU={0}", text)));

有关详细信息,请参阅String.Join Method (String, IEnumerable)

答案 1 :(得分:0)

您正在创建一些不需要的中间字符串。除非你这么做,否则对性能的影响可能并不是那么大。您正在分配GC必须进行清理的内存,因此如果有很多内存,则收集时间会更长。更有效的方法可能是使用StringBuilder并且只在完成后创建一个字符串。

StringBuilder builder = new StringBuilder();
foreach (string ou in Web.Info.Ldap.ouList)
{
    builder.Append("OU=").Append(ou).Append(",");
}

foreach (string dc in Web.Info.Ldap.dcList)
{
    builder.Append("DC=").Append(dc).Append(",");
}

if (builder.Length > 0)
    builder.Length--; // remove the trailing comma
string container = builder.ToString();