Ret*_*hic 0 c# generics parsing list
我有很多存储在列表中的类.我正在尝试创建一个接受List作为泛型类型的方法,并将相应列表中的每个元素的内容作为字符串返回.
这是许多课程中的一个的样本.这将被定义为List <Player>:
public class Player
{
public int PlayerId { get; set; }
public string PlayerName { get; set; }
public string FavoriteThing { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我仍然在努力让语法正确:
public static string GetStringOfData<T>(List<T> data)
{
string dataString = string.Empty;
var type = data.GetType();
// Insert magic here to get values for PlayerId, PlayerName, etc...
return dataString;
}
Run Code Online (Sandbox Code Playgroud)
我们怎样才能实现这一目标?我正在使用C#4.0.
更新 我正在使用的类是从edmx模型生成的,连接到数据库.这是一个报告工具,它将解析各种表并通过电子邮件向用户报告错误.用户特别要求能够查看所有字段的内容.
每种类型都继承了该ToString方法object.覆盖ToString你的课程.
public class Player
{
...
public override string ToString()
{
return String.Format("Player [ID = {0}, Name = {1}]",
PlayerId, PlayerName);
}
{
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用非泛型IEnumerable来处理它们.(为什么要限制自己List<T>,如果你能有免费的午餐IEnumerable?后者将一起工作List<T>,数组SortedLists<T>,HashSet<T>,IEnumerbale<T>,的算法实现IEnumerable基于集合都没有,...)
public static string GetStringOfData(IEnumerable data)
{
var sb = new StringBuilder();
foreach (object o in data) {
sb.Append(o).Append("; ");
}
if (sb.Length >= 2 ) {
sb.Length -= 2;
}
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
这适用于几乎任何类型的集合.
注意:覆盖ToString具有正面的副作用,调试器将向您显示此字符串,而不是仅显示类型名称.