【问题标题】:An object of a type convertible to 'int' is required需要可转换为“int”类型的对象
【发布时间】:2014-03-18 12:33:08
【问题描述】:

这是我的代码:

namespace Cinemaseats

 {public partial class MainForm : Form
    {
    private const int numOfSeats = 60;
    private int numOfReservedSeats = 0;
    Seat currentSeat = new Seat();
    public MainForm()
    {
        InitializeComponent();
        InitializeGUI();
    }

    private void InitializeGUI()
    {
        radioButton1.Checked = true;
        namn.Text = string.Empty;
        pris.Text = string.Empty;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        **int seatNr = ReadAndValidateSeatNr();**

        if (seatNr < 0)
        {
            MessageBox.Show("Välj ett föremål från listan");
            return;
        }

        if (radioButton2.Checked)
            ReserveSeat(seatNr);
        else
            CancelSeat(seatNr);

        UpdateGUI(seatNr);
    }

    public int GetnumOfSeats()
    {
        return numOfSeats;
    }

    **public int ReadAndValidateSeatNr()
    {
     thelist.Items.Add(test); //test
     return;
    }
    string test = Convert.ToString(2);
}**
}

我已将字符串“test”转换为 int,但 VS 仍然说返回值必须是 int?我想在我的列表框中显示 60 个“座位”,即“座位 1”、“座位 2”等等。我写了一个测试字符串,看看我是否可以让它工作。我不确定 getter 和setters 方法有效,但我认为 otu 我在这里需要它们?

【问题讨论】:

  • VS 并没有说返回值必须是 int,你可以 - 看看你的签名:public int ReadAndValidateSeatNr( ) 和你的用法:int seatNr = ReadAndValidateSeatNr();

标签: c# string int implicit-conversion


【解决方案1】:

在您的 ReadAndValidateSeatNr() 函数中,您没有返回任何内容:

public int ReadAndValidateSeatNr()
{
     thelist.Items.Add(test); //test
     return;  //<--------- here nothing is being returned
}

我的编译器给了我同样的错误:P

如果您不需要返回任何东西,请将返回更改为void

public void ReadAndValidateSeatNr()
{
     thelist.Items.Add(test); //test
     //return; redundant statement - not even required in this case
}

如果您的要求类似于 "Seat 1" 的 1 等 - 使用枚举:

enum my_enum{ Seat1=1, Seat2= 2};

public int ReadAndValidateSeatNr()
{
        switch(test)
        {
             case "Seat 1":
             thelist.Items.Add(test); //test
             return (int)my_enum.Seat1;

             case "Seat 2":
             thelist.Items.Add(test); //test
             return (int)my_enum.Seat2;
        }
}

【讨论】:

  • 那我应该返回什么?我尝试过返回测试,但它无法将字符串转换为 int...即使它应该已转换为 int?
  • @Baxtex 返回一个 int 怎么样?
  • @Baxtex - 如果您不需要任何返回值,请将返回类型更改为 void。这取决于您的逻辑要求。
  • 如果我需要同时返回一个 int 和一个字符串怎么办?我需要一个 int 用于其他方法来比较数字,但是我希望它在列表框中显示“Seat 1”。但我无法将“座位”转换为 int。我可以稍后以某种方式添加它们吗?...
  • @Baxtex - 字符串文字 "seat"NOT 整数 - 您打算如何将其转换为 int?!请改用枚举。
【解决方案2】:

如果您不想在 ReadAndValidateSeatNr 方法中返回某些内容,您应该像这样更改它:

public void ReadAndValidateSeatNr() 
{
    thelist.Items.Add(test);
}

【讨论】:

    【解决方案3】:

    方法可以返回一个 int 或一个字符串(也就是说只有一种类型)。正如其他人建议的那样,如果您不想返回任何东西,请将返回类型更改为 void。

    如果您的问题只是开头有“Seat”字符串,那么您不应该将项目添加到方法内的列表框中。而是从方法中返回一个 int 并通过在主块中执行类似的操作将项目添加到列表框中。

    thelist.Items.Add("Seat" + ReadAndValidateSeatNr().ToString());

    在这种情况下,您的方法将重新调整一个 int 并且可以独立使用,您仍然可以以您想要的格式添加到您的列表框中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      相关资源
      最近更新 更多