C# 帮忙解决下

来源:百度知道 编辑:UC知道 时间:2024/06/26 05:15:17
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication2
{
class Program
{

static void Main()
{
int x;
try
{
// Don't initialize this variable here.
x = 123;
}
catch
{
}
// Error: Use of unassigned local variable 'x'.
Console.Write(x);
}

}

}
他为什么说X没有赋值

static void Main()
{
int x = 0;
try
...

try 中的内容,并不保证会执行,而你的catch 里面又没有给 X 赋值

所以,后面的 Console.Write 的时候,编译器就会不通过了

你可以开始的时候,就给 x 赋值,或者在 catch 里,加一句给x赋值的,就OK的

x在申明的时候就的赋值

应为x在try块内赋值的。
这里你的try块内只有x=123这一个语句,你可以认为x是无论如何都会被赋到值的。
但是,如果在try块内x=123这句语句之前还有其他的语句,并且在这些之前的语句就抛出了异常,就会直接跳到catch块,而不会经历x=123这句语句,最终执行Console.Write(x); 这句时x就没有值。
而编译器是不允许这种情况发生的,所以既然x是在try块外声明的,那么赋值语句也必须放在外面。

try的问题 说的对

你必须在try的外面给x先赋值,因为在Main()中定义的变量必须赋值,当然你也可以定义一个全局的变量x ,必须是static的,那样的话,也行