【问题标题】:Cannot implicitly convert type 'void' to 'int'?无法将类型“void”隐式转换为“int”?
【发布时间】:2016-02-17 14:47:10
【问题描述】:

好吧,我对编程还很陌生,我不明白为什么会出现这个错误。

我的方法应该存储它在这个方法中所做的邮件:

    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 的解决方案。也许这是不可能的?

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

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

【问题讨论】:

  • 您希望phishingMailId = _storageAgent.StoreMail 做什么?您想要返回什么方法?
  • @我希望存储网络钓鱼邮件的 ID。

标签: c# entity-framework int void


【解决方案1】:

在我的例子中,我在数据库 SQL 服务器中创建了存储过程, 然后我在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- 最后,您可以从程序中调用您的类和存储过程。

【讨论】:

    【解决方案2】:

    在创建方法时,您定义了返回类型。无效意味着它不会返回任何东西。您已将您的方法定义为public void StoreMail(),因此它不会返回任何内容。 当您调用该方法时,您要求返回phishingMailId = _storageAgent.StoreMail(phishingMail)。但是因为您将方法定义为 void 并且您没有让该方法返回任何内容,所以您无法获取 id 并且您会收到错误。

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

    public int StoreMail(PhishingMail phishingMail){}
    

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

    return newId;
    

    【讨论】:

      【解决方案3】:

      方法

      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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-22
        • 1970-01-01
        • 1970-01-01
        • 2014-04-14
        相关资源
        最近更新 更多