繁体   English   中英

如何在条件语句之外的C#条件语句中获取值?

[英]How to get value in conditional statement in c# outside of that conditional statement?

如何在c#中的条件语句中获取值(例如if语句中的示例,并且您希望if语句中的值在它外部使用)如何?

int a, b, c;
if (a > 3)
{
    c = 20;
}
else if (b < 3)
{
    c = 10;
}  

//how do i get the value of c outside the conditional statement??
Console.WriteLine("{0}", c);

//it always says local variable unassigned local variable

*更新据说我的代码是正确的,并且我已经声明了; 我想使用条件语句之外的值。 *更新所有我想知道的就是获取条件之外的c值

似乎您声明a但没有初始化它。在C#您应该在首次使用之前将局部变量初始化为某种东西。 如果if语句的计算结果为falsea仍将保持未初始化状态,即使它评估为true您也要尝试在初始化之前读取它的值(在x++ ),因此仍然是一个问题。 要解决此问题,只需在声明时使用默认值对其进行初始化:

int a = 0;

在这种情况下a应在if语句之外声明a。 IE

int a = 1;

if(condition){
  a=a++;
}

console.WriteLine("{0}",a);

但是,您的代码有几个问题。 最值得注意的是,您确定要执行a=a++吗? 这段代码是多余的,您应该只做a++

我怀疑您的真正问题出在共享代码之外。 如果您发布更多代码,我可以优化答案以帮助您更多。

在新的代码示例中,问题在于您已经声明了变量abc但尚未对其进行初始化 可能会输入if语句,但可能不会输入if语句,因此可能不会执行if语句内部完成的所有赋值。

在使用它们之前,您需要告诉编译器a,b和c的初始值是什么,我认为这里几乎每个人都已经说过。 尝试将代码更改为此:

int a = 0, b = 0, c = 0;
if (a > 3)
{
    c = 20;
}
else if (b < 3)
{
    c = 10;
}  

//This should print out 10
Console.WriteLine("{0}", c);

//no more compile errors will occur

注意, abc默认值均为0因此,如果未输入if语句,它们仍将被分配一个可用值。

同样,如果a = 0b = 4则整个if块都将被跳过,而c保持不变,这是将其默认值0打印到控制台的地方。

以下是我认为不是最好的选择的另一种方法:

int a = 0, b = 0, c;
if (a > 3)
{
    c = 20;
}
else if (b < 3)
{
    c = 10;
}
else
{
    c = 1;
}

Console.WriteLine("{0}", c);

即使您没有初始化c变量,它也会编译,因为在某种程度上您是这样。 最后, else将变量分配为1,因此不会出现未初始化c情况。

你的问题根本不是c 您的问题是ab 您只需要更多地了解编译器是如何工作的即可。

让我们这样说:你有...

int a, b, c;

在这里,您告诉编译器它将使用3个变量,这些变量最终将在某个位置包含int值; 但是现在它们什么也没有,它们为空(注意: 不是0; empty ),或者在C#中为null

当编译器到达此处时:

if (a > 3)
{
    c = 20;
}

它说:“哇!我需要检查a是否小于3,但是在此行a从未分配值之前,它是空的,我不能那样检查它。我最好抛出一个错误。”

下一个条件也会发生同样的情况。

就像其他答案所说的那样,如果在给条件分配值之前,编译器将能够比较和使用它们。

现在,让我们看一下您的原始代码:

int a;
//I'll asume you declared a the same way that the other code

if (condition)//this is true
{
    a = a++;
}
//how do i get the value of a?

Console.WriteLine("{0}", a);
//it always says local variable unassigned local variable

当编译器到达Console.WriteLine("{0}", a); ,它说:“嗯...我必须打印a ,但是只有当 conditiontrue它才有一个值, 但是如果为false ,我将无法打印它,因为它将为空。最好抛出现在比运行时出错!”

如您所见,仅在确定导致代码行的所有可能方式为该变量分配值之后,才使用变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM