我试图编写一种方法,将任何 IList 的事物转换为这些事物的逗号分隔列表作为字符串。它看起来像这样:
public static string ToStringList<T>(this T source) where T : IList<object>
{
string list_string = "[EMPTY]";
try
{
if (source != null && source.Count() > 0)
{
list_string = "";
foreach (var item in source)
{
//ToString unnecessarily written here to highlight the usage
list_string += $", {item.ToString()}";
}
}
}
catch
{
list_string = "[ERROR - could not list values]";
}
list_string = list_string.StartsWith(", ") ? list_string.Substring(2) : list_string;
return list_string;
}
我想在可观察的站点集合上使用此方法:
public class Site
{
public string Name { get; set; }
public string code { get; set; }
public override string ToString()
{
return Name;
}
}
但是,当我尝试运行以下代码时,出现转换错误:
public ObservableCollection<Site> SelectedSites {get;set;}
//[some skipped code that inserts values into the ObservableCollection]
//Error: Cannot convert from Site to object
var sites = SelectedSites.ToStringList();
我明白为什么会出现转换错误 - 代码无法知道如何Site
将object
. 但是,鉴于ToString()
一切都存在,有没有办法可以改变方法ToStringList()
,使其可以接受任何类型的 IList?
我已经阅读了一些关于 IList 的文章和页面(比如this和this),但老实说,他们既困惑又开明——因为我所问的问题是不可能的或冗长以至于不切实际(在这种情况下,我可以找到另一个方法)?
我正在使用 .NET Framework 4.8。