我有一个函数返回一个List,它只返回一个电子邮件列表,我想将它转换为我的模型进行存储,但是我收到了这个错误:
System.InvalidCastException:'无法将'System.String'类型的对象强制转换为'Linkofy.Models.Emails'。'
这是因为身份证?我可以在我的模型中声明一个列表而不为它创建一个对象吗?谢谢。我以前没有玩过列表,但觉得这是存储它的最好方法吗?有人可以指出这里有什么问题,如果它对别人没有价值,我会删除!
投射代码:
List<string> emails = new List<string>();
foreach (string url in urls)
{
getEmails(url);
foreach (var item in getEmails(url))
{
if (emails.Contains(item))
{
continue;
}
else
{
emails.Add(item);
}
}
}
List<Emails> returnemails = emails.Cast<Emails>().ToList();
return returnemails;
}
我的模特:
namespace Linkofy.Models
{
public class Outreach
{
public int ID { get; set; }
public string name { get; set; }
[Required]
public string domain { get; set; }
public List<Emails> emails { get; set; }
public int UserTableID { get; set; }
public virtual UserTable UserTable { get; set; }
}
public class Emails
{
public int ID { get; set; }
public string Email1 { get; set; }
public string Email2 { get; set; }
public string Email3 { get; set; }
public string Email4 { get; set; }
public string Email5 { get; set; }
public string Email6 { get; set; }
public string Email7 { get; set; }
}
}
答案 0 :(得分:0)
您的错误说明了您需要了解的所有信息。您string
类型的Models.Emails
没有默认广告。
Emails
本质上是一个带有电子邮件地址集合的ID,它出现了。我建议使用.Net System.Net.Mail
命名空间而不是你在这里用字符串做的事情,但在轻量级应用程序中,字符串可能很好。
您需要为对象提供构造函数,或更改Emails
对象属性。我强烈推荐后者,甚至两者兼顾:
public class Emails
{
public int ID { get; set; }
public string[] Addresses{ get;set; }
public Emails() {};
public Emails(IEnumerable<string> list)
{
this.Addresses = list.ToList().ToArray();
}
然后在您的代码中,每次需要新的EMails对象时,只需构建一个并将其添加到列表中。将电子邮件声明为List而不是List,并绕过强制转换的需要:
List<Emails> emails = new List<Emails>();
并在你的循环中:
emails.Add(new Emails { emails = new string [] { item } });
然后您可以按索引访问您的电子邮件。 不过,我的问题是,为什么要创建一个列表对象,但只在其电子邮件集合中放入一个条目?