【问题标题】:Why am I getting null from a class C#为什么我从 C# 类中得到空值
【发布时间】:2015-10-21 06:05:45
【问题描述】:

我正在向一个类发送一个变量,而在程序调试时,当我发送变量时,如果我要查看类,变量中有值,但是当我需要使用它时,我要为空,这就是我正在做的事情:

Clase1 objclase = new Clase1();

private void b_Aceptar_Click(object sender, EventArgs e)
{
    //cbnombre is the name of a combobox
    objclase.retornaNombre(cb_nombre.SelectedItem.ToString());
    //MessageBox.Show(cb_nombre.SelectedItem.ToString());
}

课程有:

public class Clase1
{
    public string _nombre;
    public string nombre
    {
        get { return _nombre; }
        set { _nombre = value; }
    }

    public void retornaNombre(string nom)
    {
        _nombre = nom;
    }
}

这是我的问题:

public void button1_Click(object sender, EventArgs e)
{
    frm_IngresarNombre ventana = new frm_IngresarNombre();
    ventana.ShowDialog();

    MessageBox.Show(objclase.nombre);
}

在这个消息框我得到空... 希望你能帮助我。

【问题讨论】:

  • 您没有设置属性并访问它,这就是为什么会出错。
  • 参见this meta post 非英文代码。
  • 这个问题主要是:1.) 是 objcase 与其他函数中的相同。 2.) be_aceptar 方法在 button1_click 之前运行吗?如果两者都是真的,那么它很奇怪,但我猜两者之一是假的
  • 在寻求调试帮助时请提供MCVE。
  • 最简单的解释是,你会得到 的字符串默认值。在访问它之前,您是否为 nombre 分配了任何东西?如果您可以直接访问它,为什么还要构建一个方法来将某些东西分配给 nombre?

标签: c# visual-studio-2012


【解决方案1】:

你有没有在点击按钮时模仿班级?如果没有,将在附加更改中抛出空引用异常

   `public string _nombre;
    public string nombre
    {
        get { return _nombre; }
        set { _nombre = value; }
    }`

到

    private string _nombre;
    public string nombre
    {
        get { return _nombre; }
        set { _nombre = value; }
    }

【讨论】:

    【解决方案2】:

    使用您创建的 get/set 方法,您实际上并不需要您编写的赋值方法。

    您可以通过简单的编写来为您的对象分配一个变量 objclase.nombre = value 而不是需要赋值方法(get/set 以这种方式工作,但也兼作访问器)。

    当您从所选项目分配变量时,我希望您认为被选中的项目实际上并未被选中 - 我过去曾遇到过顶部项目可见但未被视为“已选中”的问题因此也会返回不正确的值。

    请参阅 Selecting default item from Combobox C# 以解决该问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-03
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 2016-12-16
      • 2020-11-03
      相关资源
      最近更新 更多