我有以下代码返回我想要迭代的泛型列表,因此生成一个以逗号分隔的值列表作为字符串。
public static List<ReportCriteriaItem> GetCurrentSelection(ReportWizardCriteriaType criteriaType)
{
return Criteria.CriteriaList.FindAll(delegate(ReportCriteriaItem item)
{ return item.CriteriaType == criteriaType; }
);
}
这里是ReportCriteriaItem的定义 - 我创建了一个通用列表的对象...我认为这是关键,将其“id”字段变为CSV:
public class ReportCriteriaItem
{
[System.Xml.Serialization.XmlAttribute("id")]
public string Id { get; set; }
[System.Xml.Serialization.XmlAttribute("name")]
public string Name { get; set; }
[System.Xml.Serialization.XmlAttribute("value")]
public string Value { get; set; }
[System.Xml.Serialization.XmlAttribute("type")]
public ReportWizardCriteriaType CriteriaType { get; set; }
public ReportCriteriaItem() { }
public ReportCriteriaItem(ReportWizardCriteriaType criteriaType, string id, string name, string value)
{
this.Id = id;
this.Name = name;
this.Value = value;
this.CriteriaType = criteriaType;
}
}
我可以为每个循环使用a来执行此操作吗?
答案 0 :(得分:4)
最简单的方法是使用string.Join
:
string joined = string.Join(",", GetCurrentSelection(...).Select(x => x.Value));
您所做的具体细节将取决于您使用的C#和.NET版本,但以上只是一个示例。如果您可以提供更多详细信息,我们可以为您提供更具体的代码。
(特别是在.NET 3.5中,您需要为string.Join
提供一个数组;在.NET 4中您不需要。您正在使用的.NET版本更为重要而不是你使用ASP.NET的事实。)
答案 1 :(得分:3)
如果您已有列表,则可以使用String.Join
方法:
var myList = GetCurrentSelection(ReportWizardCriteriaType.SomeCriteria);
var csv = String.Join(",",myList.ToArray());
瞧!
答案 2 :(得分:2)
如果您有.net 4,则可以使用String.Join<T>(string, IEnumerable<T>):
string csv = string.Join(", ", GetCurrentSelection(...));
通过对ReportCriteriaItem
执行ToString()
,从{{1}}生成字符串项。如果必须通过访问ReportCriteriaItem的其他方法或属性(或者如果您使用的.net版本小于4)生成字符串值,则Jon Skeet's answer是可行的方法。
答案 3 :(得分:1)
string list = "";
foreach (ReportCriteriaItem item in GetCurrentSelection(...)) {
if (!string.IsNullOrEmpty(list)) list += ",";
list += item.???;
}
// do something with the list.
答案 4 :(得分:1)
我喜欢加入一行解决方案,但由于野兽的性质,而野兽是我的对象,我必须循环并拉出每个通用项目的价值......
string csv = "";
foreach (ReportCriteriaItem item in GetCurrentSelection(criteriaType))
{
csv += item.Id + ",";
}
return csv.TrimEnd(",".ToArray() ) ;
答案 5 :(得分:0)
享受!
public static class DataHelper
{
public static string ToCsv<T>(string separator, IEnumerable<T> objectlist)
{
Type t = typeof(T);
PropertyInfo[] fields = t.GetProperties();
string header = String.Join(separator, fields.Select(f => f.Name).ToArray());
StringBuilder csvdata = new StringBuilder();
csvdata.AppendLine(header);
foreach (var o in objectlist)
csvdata.AppendLine(ToCsvFields(separator, fields, o));
return csvdata.ToString();
}
public static string ToCsvFields(string separator, PropertyInfo[] fields, object o)
{
StringBuilder linie = new StringBuilder();
foreach (var f in fields)
{
if (linie.Length > 0)
linie.Append(separator);
var x = f.GetValue(o);
if (x != null)
linie.Append(x.ToString());
}
return linie.ToString();
}
}
像这样使用
var customers = new List<Customer>(); // Any simple class
string csv = DataHelper.ToCsv(";",customers );