我对C#和一般编程都很陌生,而且我想知道简单地声明某些内容与初始化之间的区别。
例如,如果我使用String.Split()
方法,在文档中它说它返回带有分隔字符的数组,但为什么我不能访问该数组?我必须做类似的事情:
string [] array = mystring.Split()
有没有办法处理只是声明但未初始化的东西?在运行时期间发生了什么,只有声明的东西(变量,数组等)? 谢谢。
答案 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