无法隐式转换类型' void'到' int'?

时间:2015-11-16 13:22:40

标签: c# entity-framework int void

Oke所以我对编程很新,我不知道为什么会出现这个错误。

我的方法应该存储它在此方法中执行的邮件:

    public void StoreMail(PhishingMail PhishingMail)
    {
        using (var phishingMailStorage = new PhishFinderModel())
        {
            phishingMailStorage.PhishingMail.Attach(PhishingMail);

            phishingMailStorage.SaveChanges();

        }

然后在我的processPhishingMail方法中调用Store方法。但后来我得到了错误:无法隐式转换类型' void'到' int'。

public void ProcessPhishingMail(PhishingMail phishingMail)
{                     
      Hashtable phishingUrls;
      int phishingMailId;
      int phishingUrlId;
      //Error convertion
      phishingMailId = _storageAgent.StoreMail(phishingMail);

所以我无法找到从void转换为int的解决方案。也许它不可能?

我的问题是:如何在我的代码中转换这些类型?

请不要苛刻我真的很陌生。感觉就像我在信息的海洋中游泳,我不知道在哪里看或开始。因此,非常欢迎任何建议的教程。

3 个答案:

答案 0 :(得分:4)

方法

public void StoreMail(PhishingMail PhishingMail)

没有返回任何值。所以当你这样做时:

phishingMailId = _storageAgent.StoreMail(phishingMail);

您收到该错误,因为StoreMail被声明为void,这意味着它不会返回任何内容。

要解决此问题,只需按以下方式拨打StoreMail

_storageAgent.StoreMail(phishingMail);

如果您打算从StoreMail返回值,则必须将其更改为返回int值:

public int StoreMail(PhishingMail PhishingMail)
{
    using (var phishingMailStorage = new PhishFinderModel())
    {
        phishingMailStorage.PhishingMail.Attach(PhishingMail);

        phishingMailStorage.SaveChanges();
    }

    return someIdWhichYouNeedToFigureOut;
}

答案 1 :(得分:4)

制作方法时,您可以定义返回类型。虚空意味着它不会返回任何东西。您已将方法定义为public void StoreMail(),因此说它不会返回任何内容。 当您调用该方法时,您要求返回phishingMailId = _storageAgent.StoreMail(phishingMail)。但是因为你将方法定义为void而你没有让方法返回任何东西而你得不到id并且你得到了错误。

要解决这个问题,你必须让你的方法返回一个int

public int StoreMail(PhishingMail phishingMail){}

然后在方法中进一步定义要返回的内容

return newId;

答案 2 :(得分:0)

就我而言,我在数据库SQL Server中创建了存储过程, 然后我在C#程序中创建了一个类,并调用了该存储过程,并在该类内部的存储过程中添加了参数,并返回了数据表中的数据,最后我可以在程序中的任何位置调用我的类了 像这个例子:

1-创建存储过程:

CREATE proc [dbo].[GET_SAMPLE_KIND]
@TESTID int
as 
select Dept_id,ID_sample from LabTests
where LabTests.TestId = @TESTID 

2-在C#程序中创建类,并使用类似以下代码的参数调用存储过程:

public DataTable GET_SAMPLE_KIND(int TESTID)
        {
            DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
            DataTable dt = new DataTable();

            SqlParameter[] param = new SqlParameter[1];
            param[0] = new SqlParameter("@TESTID", SqlDbType.Int);
            param[0].Value = TESTID;

            dt = DAL.SelectData("GET_SAMPLE_KIND", param);
            DAL.close();
            return dt;
        }

要连接数据库并从中读取数据,您必须使另一个类与sql server联系(在我的情况下为DAL.selectData方法)以从数据库中选择数据,对于插入,更新和删除语句,还可以创建存储过程,然后创建另一个void在您的班级中针对该功能。

3-最后,您可以从程序中调用类和存储过程。