我在c#中编写代码,我想在if语句为true时执行{do something11}以及何时if
语句false执行{do something22},statement1和statement2,我不需要
if语句为true时执行statement1和statement2.我使用break ibn if语句但是
不是这样,我怎么能这样做?
static void one_time(int x)
{
if (x<10)
{do something11} // when if true
else
{do something22}// when else true
statement1 // when else true
statement2 // when else true
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找类似于python global
关键字的功能.我想从函数中更改main中声明的变量.
例如:
void f() {
x = 5;
}
int main() {
int x = 0;
f();
cout << x; // prints 5
}
Run Code Online (Sandbox Code Playgroud)
有解决方案吗
代码给出了nullpointer异常的错误..... wat做什么?
import java.awt.event.*;
import javax.swing.*;
public class Gui implements ActionListener{
JButton button;
public Gui(){
JFrame frame=new JFrame();
JButton button =new JButton("click me!");
button.addActionListener(this);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(button);
frame.setSize(270,300);
frame.setVisible(true);
}
public static void main(String[] args){
new Gui();
}
public void actionPerformed(ActionEvent e){
button.setText("I've been clicked");
}
}
Run Code Online (Sandbox Code Playgroud) 在Delphi中,您可以在方法中声明一个常量,并在同一方法中为其赋值.我们的想法是,下次使用此方法时,const仍将具有与上次分配的值相同的值.
它在Delphi中看起来像这样:(
我这里没有Delphi所以它没有经过测试,对此感到抱歉,但它足以证明我的意思)
procedure Form1.test;
const
AssignableConst: Integer = 0;
begin
ShowMessage(AssignableConst);
inc(AssignableConst);
end;
Run Code Online (Sandbox Code Playgroud)
每次调用过程测试时,消息框都会显示最后一个值+ 1
这个例子完全无用我知道它只是为了展示一个可赋值的const如何在Delphi中工作.
在c#中是否存在相同的含义?
我不想要一个涉及类中私有变量的解决方案,它必须留在方法中.
我的问题是关于范围.没有其他的.我不在乎该值是对象状态的一部分.这并不重要.重要的是我需要一个只能从方法范围访问的变量,而不是其他任何地方.
在Delphi中,这可以通过使用可赋值的const来完成,那么我如何在C#中执行此操作?
例如,当我们声明任何全局变量时
int x;
Run Code Online (Sandbox Code Playgroud)
它相当于
extern int x;
Run Code Online (Sandbox Code Playgroud)
现在默认情况下,编译器将全局变量初始化为0,这意味着它们被分配了内存.但如果我只是写
extern int x;
Run Code Online (Sandbox Code Playgroud)
那么这只会声明变量,而不会分配任何内存.所以,我的查询是,如果我之前写externint x
或者我不写它,在全局变量的情况下,编译器如何区别对待它们?在我简单写入的情况下int x
,它分配内存并同时将extern置于之前int x
,而在我写入的情况下extern int x
,它只声明变量而没有分配内存.请说明编译器如何以两种方式运行.
据我所知,{...}
引入了一个新的范围,这就是为什么以下方法不起作用:
for(int i = 0; i < 10; i++) {
// Do something...
}
cout << i << endl; // Error: i is not defined in this scope
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试没有大括号的同样的事情时,我得到了同样的错误.
for (int i = 0; i < 10; i++) continue;
cout << i << endl; // Same error, not sure why
Run Code Online (Sandbox Code Playgroud)
我希望i
在第二个例子中定义,因为没有{...}
引入新的范围.
我在代码中发现了一个错误
func receive() (err error) {
if v, err := produce(); err == nil {
fmt.Println("value: ", v)
}
return
}
Run Code Online (Sandbox Code Playgroud)
错误永远不会从此函数返回,但我绝对相信它应该.
经过一些测试后,我明白err
在if语句中重新声明了这一点.更重要的是 - 所有变量总是在短变量赋值内部if
声明中重新声明,尽管它们之前被声明过.
这是工作代码
func receive() (err error) {
v, err := produce()
if err == nil {
fmt.Println("value: ", v)
}
return
}
Run Code Online (Sandbox Code Playgroud)
这是一个例子:https://play.golang.org/p/1AWBsPbLiI1
好像if语句
//some code
if <init_statement>; <expression> {}
//more code
Run Code Online (Sandbox Code Playgroud)
相当于
//some code
{
<init_statement>
if expression {}
}
//more code
Run Code Online (Sandbox Code Playgroud)
所以,我的问题:
1)为什么不使用现有变量
2)为什么在文档/语言规范中没有提到这样的范围
3)为什么编译器不会说没有人返回值
代码优先:
#include <stdio.h>
void foo()
{
static int bar;
}
int main()
{
bar++;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器(Clang)抱怨:
static.c:10:2: error: use of undeclared identifier 'bar'
Run Code Online (Sandbox Code Playgroud)
该语句static int bar;
中是否应该foo()
给出bar
静态存储持续时间,这使得它在main函数之前声明并初始化?
如何删除曾经声明和定义的变量?
例如,在C++中我会这样做:
int x;
..
delete x;
Run Code Online (Sandbox Code Playgroud)
我怎么能在C#中做到这一点?
(我需要做这样的事情:
switch (something)
{
case 1:
int Number;
break;
case 2:
float Number;
break;
}
Run Code Online (Sandbox Code Playgroud)
但是我不能这样做,因为Number已经被case 1占用了...而且我想要相同的名字,所以我想在声明float Number之前删除int Number,所以compilator不会对我大喊大叫.,p
我在构建时遇到此错误:
dist/package.conf.inplace:
inappropriate type
FAILED DURING THE BUILDING PHASE. The **exception** was: ExitFailure 1
Run Code Online (Sandbox Code Playgroud)
如何subRegex
在 Text.Regex 包中使用?
我已经写了:
import Text.Regex.Posix
Run Code Online (Sandbox Code Playgroud)
但我得到了这个错误:
_.hs:13:5: Not in scope: ‘subRegex’
_.hs:13:15:
Not in scope: ‘mkRegex’
Perhaps you meant ‘makeRegex’ (imported from Text.Regex.Posix)
Run Code Online (Sandbox Code Playgroud)
所以,我去了Text.Regex
[页] [1],然后说:
使用POSIX正则表达式接口
Text.Regex.Posix
.
那么为什么不是这些功能在范围内呢?
我知道 Stack Overflow 上有这样的问题,但我想知道为什么我们不能在if
语句内声明变量,这样我们就可以通过利用if
作用域来节省空间。
例如,如果我写:
if (int i) {
...
}
Run Code Online (Sandbox Code Playgroud)
i
那么我只能在范围内使用if
,但是如果我将其写在语句之外if
,那么i
变量应该在整个块的内存中。
scope ×11
c# ×3
if-statement ×3
c ×2
c++ ×2
java ×2
.net ×1
curly-braces ×1
declaration ×1
extern ×1
ghc ×1
go ×1
haskell ×1
identifier ×1
regex ×1
static ×1
swing ×1
variables ×1