class="p0" style="text-align: center;">数组2
foreach循环
string[] names= {"tom","jerry","lily"};
foreach(string name in names)
{
Console.WriteLine("我的名字{0}",name);
}
和for的区别:for可以不逐个遍历,比如每隔一个遍历一个,或者可以从后向前遍历
foreach遍历过程中不能对集合做修改(讲List的时候再说)
函数
函数就是将一堆代码进行重用的一种机制。函数就是一段代码,这段代码可能有输入的值(参数),可能会返回值。一个函数就像一个专门做这件事的人,我们调用它来做一些事情,它可能需要我们提供一些数据给它,它执行完成后可能会有一些执行结果给我们。要求的数据就叫参数,返回的执行结果就是返回值。
有了函数写代码就像零件,C#中的各种各样的技术其实就是通过for、if等这些基础的语法将不同的函数按照一定的逻辑组织起来。
函数如果没有返回值则标记返回值类型为void
return语句
导致函数立即返回。在返回值为void的函数中return,在返回值非void的函数中return数值。
注意:如果声明了非void的返回类型,则一定要在所有分支都有返回值,不能有不返回值得情况。
函数重载(函数重名)
构成重载的条件:参数类型不同或者参数个数不同(不严谨的),与返回值的类型无关。
可变参数(*)
参数数组:int sum(params int[] values)
int sum(string name,params int[] values)
可变参数数组必须是最后一个。
参数默认值(C#4.0) :void SayHello(string name,int age=20)(*了解)
函数的ref、out参数(*)
函数参数默认是值传递的,也就是“复制一份”,例子:
ref与out区别:
ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。
ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。
字符串的处理
string的一些常用属性方法
属性
Length 获取当前字符串长度。
字段:
Empty:此字段为只读,表示空字符窜。
public static readonly string Empty
方法:
Contains:返回指定的String对象是否在此字符串中。
public bool Contains(
string value
)
Copy 创建一个与指定的String对象相同的String新实例。
public static string Copy( string str)
CopyTo:将指定数目的字符从此实例中的指定位置复制到 Unicode 字符数组中的指定位置。
public void CopyTo(
int sourceIndex,//要复制的此实例的起始位置。
char[] destination,//此实例要复制到的Unicode字符数组
int destinationIndex,//复制的起始位置
int count//复制长度
)
EndsWith:确定此字符串实例的结尾是否与指定的字符串匹配。
EndsWith(String)
public bool EndsWith( string value)
EndsWidth(String,StringComparison)
[ComVisibleAttribute(false)]
public bool EndsWith(
string value,//比较值
StringComparison comparisonType//比较方式
)
Equals
Equals(String):
IndexOf(Char,Int32) 报告指定 Unicode 字符在此字符串中的第一个匹配项的从零开始的索引。 该搜索从指定字符位置开始。
IndexOf(String,Int32)
IndexOf(Char,Int32,Int32)
IndexOf(String,Int32,Int32)
IsNullOrEmpty 指示指定的字符串是 null 还是 Empty 字符串。
Join
Join(String,String[]) 前面的是分隔符,后面的是要合并的字符串
LastIndexOf
PadLeft
PadLeft(Int32)参数为总长度,如果不够则补足,够了就不变。不能为负数。
返回一个新字符串,该字符串通过在此实例中的字符左侧填充空格来达到指定的总长度,从而实现右对齐。
PadLeft(Int32,Char)返回一个新字符串,该字符串通过在此实例中的字符左侧填充指定的 Unicode 字符来达到指定的总长度,从而使这些字符右对齐。
PadRight
Remove
Remove(Int32)参数为开始删除字符的从零开始的位置(删除从指定位置,到最后位置)
返回当前实例中从指定位置到最后位置的所有以删除的字符的新字符串。
Remove(Int32,Int32)参数为删除起始位置,删的长度
返回指定数量字符在当前这个实例起始点在已删除的指定的位置的新字符串。
Replace(Char,Char)
返回一个新字符串,其中此实例中出现的所有指定 Unicode 字符都替换为另一个指定的 Unicode 字符。
Replace(String,String)
返回一个新字符串,其中当前实例中出现的所有指定字符串都替换为另一个指定的字符串。
Split
返回的字符串数组包含此实例中的子字符串(由指定 Unicode 字符数组的元素分隔)。
Split(Char[])
返回的字符串数组包含此实例中的子字符串(由指定 Unicode 字符数组的元素分隔)。
Split(Char[], Int32)
返回的字符串数组包含此实例中的子字符串(由指定 Unicode 字符数组的元素分隔)。 参数指定返回的子字符串的最大数量。
Split(Char[], StringSplitOptions)第二个参数为分隔方式,指定空字符窜留不留。
Split(Char[], Int32,StringSplitOptions)
Split(string[])同理,也可以由字符串分割。
StartsWidth
Substring(Int32)
Substring(Int32,Int32)
ToCharArray()
ToLower()
ToUpper()
Trim()
Trim(Char[])从当前 String 对象移除数组中指定的一组字符的所有前导匹配项和尾部匹配项。
从当前字符串的开头和结尾删除所出现的所有 trimChars 参数中的字符后剩余的字符串。 如果 trimChars 为 null 或空数组,则改为移除空白字符。
public string Trim(
params char[] trimChars
)
TrimEnd
TrimStrat
String(Char[])将 String 类的新实例初始化为由 Unicode 字符数组指示的值。
String(Char, Int32)将 String 类的新实例初始化为由重复指定次数的指定 Unicode 字符指示的值。
String(Char[], Int32, Int32)
public String(
char[] value,
int startIndex,//起始位置
int length//长度
)
C#中单个字符用单引号包含就是char类型,(‘a’),单引号中放且只能放一个字符。ASCII码。
单个字符也可以表示为字符串,还可以有长度为0的字符串。null和""的区别,String.IsNullOrEmpty
string可以看做是char的只读数组。char c = s[1];。例子:遍历输出string中的每个元素。
C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改。
如果要对char进行修改,那么就必须创建一个新的字符串,用s. ToCharArray()方法得到字符串的char数组,对数组进行修改后,调用new string(char[])这个构造函数(暂时不用细研究)来创建char数组的字符串。一旦字符串被创建,那么char数组的修改也不会造成字符串的变化。例子:将字符串中的A替换为a。
常见疑问
谁说字符串不可变?string s = "abc";s="123",s这不是变了吗
要区分变量名和变量指向的值的区别。程序中可以有很多字符串,然后由字符串变量指向他们,变量可以指向其他的字符串,但是字符串本身没有变化。字符串不可变性指的是内存中的字符串不可变,而不是变量不变。
string s10 = s1;//s10指向s1指向的字符串,而不是s10指向s1,哪怕s1以后指向了其他内存,那么s10还是指向"hello"