声明和初始化之间的区别

时间:2018-05-15 19:43:58

标签: c# .net windows runtime c#-6.0

我对C#和一般编程都很陌生,而且我想知道简单地声明某些内容与初始化之间的区别。 例如,如果我使用String.Split()方法,在文档中它说它返回带有分隔字符的数组,但为什么我不能访问该数组?我必须做类似的事情:

string [] array = mystring.Split()

有没有办法处理只是声明但未初始化的东西?在运行时期间发生了什么,只有声明的东西(变量,数组等)? 谢谢。

2 个答案:

答案 0 :(得分:4)

通过声明变量的类型和名称来声明变量:

string[] array;

通过给它初始值来初始化它:

string[] array; // declare
array = mystring.Split(); // initialize

在c#中,与许多其他编程语言一样,您可以将两个操作组合到一个代码行中:

string[] array = mystring.Split();

使用局部变量执行此操作时,请考虑使用var而不是在声明中明确使用变量的类型,但仅限于可以从右侧轻松推导出变量类型的情况赋值运算符:

var list = new List<int>(); // best.

var array = mystring.Split(); // still quite good.

var myVar = SomeClass.SomeMethodThatWeDoNotKnow(); // not so good...

这样做的原因是每个读list List<int>的代码的人都很明显,而你必须知道string.Split返回知道{{1} }是一个字符串数组,您需要将鼠标悬停在array关键字上,以了解var的类型。

在声明字段(含义 - 类级变量)时,它们会自动初始化为their default value - myVar用于参考类型,null用于数字等等#39;。但是,此默认值规则不适用于局部变量(意思是 - 在方法内声明的变量)或方法参数 - 您必须先显式初始化它们才能使用它们,否则您将收到编译错误:< / p>

0

将产生此编译错误:

  

使用未分配的本地变量&#39; a&#39;

每当你使用返回某个东西的方法(意思是,它不是void)时,你可以使用该方法直接返回的任何方法,而不将结果设置为变量:

int a;
Console.Write(a);

或者只是忽略返回值,如果你不需要它:

if(myString.Split()[0] == someSubString) // use a value from the array
{ /* do some stuff here */ }

var result = SomeClass.Method().ToString(); // use ToString on the return value of Method

答案 1 :(得分:0)

为什么我不能访问该数组?

您可以,您不必将结果放入变量:

System.Diagnostics.Debug.Print(mystring.Split()[0]); //will print the value of index 0. This is dangerous.

有没有办法处理只是声明但未初始化的东西?

如果它是一个引用对象,那么你可以检查声明的内容是否为null,从技术上讲,它是在初始化之前使用它的。声明时,值类型初始化为默认值。您可以声明某些类型并查看调试器中指定的值:

int four; //0
double two; //0
string[] fizbo; //null
object food; //null

在运行时期间,只有声明的内容会发生什么?

您应该了解声明对象时会发生什么以及声明引用类型时会发生什么。

请参阅:https://www.codeproject.com/Articles/76153/Six-important-NET-concepts-Stack-heap-value-types