【问题标题】:Object reference not set to an instance of an object on value type c#对象引用未设置为值类型 c# 上的对象实例
【发布时间】:2013-08-24 09:11:31
【问题描述】:

我写了两行代码

1)

int i ;
MessageBox.Show(i.ToString());

2)

string str;
MessageBox.Show(str.ToString());

因为我没有初始化任何变量并且 (1) 返回 0 但 (2) 抛出异常说 Object reference not set to an instance of an object

我无法理解 string 是 int 的值类型,然后显示此错误。

【问题讨论】:

  • 我认为第二个 sn-p 应该是MessageBox.Show(str);?
  • 是的,它是 MessageBox.Show(str);
  • in sn-p str 本身就是一个字符串,所以不需要str.ToString();MessageBox.Show(str); 就够了吗?

标签: c# string int


【解决方案1】:

....I can't understand that string is value type as int then this error is being occurred.

谁说字符串是值类型?它的 reference 类型,你必须在使用它之前给出它的值,否则你会得到你得到的错误。

而 int 是值类型。即使不初始化,也会被初始化为0。

你可以这样做

string str = String.Empty; 

str = SomeFunctionReturningString();

if (!String.IsNullOrEmpty(str)) //cause that function can also return null.
    MessageBox.Show(str);

【讨论】:

  • like string 有没有什么数据类型可以作为引用类型?
  • 如果我声明字符串并为不同的五次赋值。所以将有五个对象或只有一个对象将被覆盖。
  • 后者。最后一个将被保留。
  • “最后一个将被保留”是什么意思? .会有五个对象还是一个对象会被覆盖?
  • 如果你输入“I”,然后是“We”,然后是“A”,那么“A”将在变量中。 “我们”将覆盖“我”,“A”将覆盖“我们”。
【解决方案2】:

int是值类型,string是引用类型,所以它们是不同的。

如果您有一个 field(类级变量),并且您没有在声明该字段的位置初始化该字段值,那么将使用其默认值初始化 int0。而string 字段将获得引用类型的默认,即null 引用。

当你有一个局部变量时,你必须在使用它之前给它赋值。局部变量是在方法体(或构造函数、访问器等)中声明的变量。因此,您的问题令人困惑,因为不清楚您是否有字段或本地人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多