无法在Unity中转换通用字符串
c#
我正在尝试声明一个字符串列表并向其添加 DateTime。但是,cannot convert from 'System.Collections.Generic.List<string>' to 'string'当我执行以下操作时出现错误:
public List<string> AllTime_ = new List<string>();
void Start () {
AllTime_.Add(Data.Select (d => DateTime.ParseExact (d, "yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture).ToString ("HH")).ToList ());
AllTime_.Add(Data.Select (d => DateTime.ParseExact (d, "yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture).ToString ("mm")).ToList ());
}
但是当我通过声明如下所示的 List 来做同样的事情时,它不会抛出任何错误并且运行良好。唯一的问题是重新定义了列表并且列表的大小发生了变化。如何通过添加到列表来尝试解决问题的第一种方法?
public List<string> AllTime_ = new List<string>();
void Start () {
AllTime_ = new List<string> (Data.Select (d => DateTime.ParseExact (d, "yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture).ToString ("HH")).ToList ());
AllTime_ = new List<string> (Data.Select (d => DateTime.ParseExact (d, "yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture).ToString ("mm")).ToList ());
}
回答
AllTime_是一个List<string>所以每个元素都是一个,string而不是一个,List<string>所以Add有一个string作为参数 - 你试图给它一个完整的列表。
唯一的问题是重新定义了列表并且列表的大小发生了变化
这听起来也不完全正确;) 发生的情况是您覆盖了列表。由于您Select的物品数量相同,因此尺寸应该相同。您更想要的是将两个结果合并到一个列表中。
您可能正在寻找 AddRange
AllTime_.Clear();
AllTime_.AddRange(Data.Select (d => DateTime.ParseExact (d, "yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture).ToString ("HH")));
AllTime_.AddRange(Data.Select (d => DateTime.ParseExact (d, "yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture).ToString ("mm")));
虽然我想知道为什么将相同的时间添加两次但作为单独的格式?总是将成对的“线”放在一起不是更有意义吗?这也做了两次解析工作。
我可能宁愿做例如
AllTime_.Clear();
foreach(var d in Data.Select(d => DateTime.ParseExact (d, "yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture)))
{
AllTime_.Add(date.ToString("HH"));
AllTime_.Add(date.ToString("mm"));
}