.NET转换为数组模型对象

时间:2018-02-01 13:29:36

标签: c# .net asp.net-mvc

我有一个函数返回一个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; }
}

}

1 个答案:

答案 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 } });

然后您可以按索引访问您的电子邮件。 不过,我的问题是,为什么要创建一个列表对象,但只在其电子邮件集合中放入一个条目?