我们可以认为类是属于命名空间的,如果当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间。
1.光标去点击
2.alt+shift+f10
3.记住直接写
当我们需要在一个项目中引用另一个项目的类的时候,首先需要添加引用
然后再引用命名空间
值类型:int double bool char decimal struct enum
引用类型:string 自定义类 数组 object 接口
值类型和引用类型在内存上存储的地方不一样:值类型的值是存储在内存的栈中,引用类型的值是存储在内存的堆中。
在传递值类型和传递引用类型的时候,传递的方法不一样:值类型我们称之为值传递,引用类型我们称之为引用传递。
值类型在复制的时候,传递的是这个值本身。
引用类型在复制的时候,传递的是对这个对象的引用。他们指向的是同一块空间,操作哪一个另一个都会改变。
相当于把number的地址复制给n,栈中地址相同了。相当于同一块空间了,改变哪个,另一个都会改变。
字符串具有不可变性:当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟了一块空间存储新值。
这样会出现一个问题,当你对一个字符串大量的重新赋值的时候,就会产生很多内存垃圾。当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,立即把它销毁。
结合引用传递,s1和s2分别是什么?
string s1 = "zs";
string s2 = s1;
s2 = "ls";
Console.WriteLine(s1);
Console.WriteLine(s2);
Console.ReadKey();
由于字符串具有不可变性,所以s2开辟了另一块空间,s1是zs,s2是ls。
我们可以将字符串看做是char类型的一个只读数组。
string s = "abcdefg";
//s[0] = 'b'; 不能这样做,因为是只读的
//首先将字符串转换成char类型的数组
char[] chs = s.ToCharArray();
chs[0] = 'b';
//将字符数组转换为字符串
s = new string(chs);
//既然可以将string看做char类型只读数组,所以可以通过下标访问字符串中的某一个元素
Console.WriteLine(s[0]);
Console.ReadKey();
str.Length:获取当前字符串中字符的个数。
string.s="1111111";
Console.WriteLine(s.Length);
str.ToUpper():将字符串转换成大写。
str.ToLower():将字符串转换成小写。
str1.Equals(str2,StringComparison.OrdinalIgnoreCase):比较两个字符串,忽略大小写。
//比较两个课程
Console.WriteLine("请输入你喜欢的课程");
string lessonOne = Console.ReadLine();
//将字符串转换为大写
lessonOne = lessonOne.ToUpper();
//转换成小写
//lessonOne = lessonOne.ToLower();
Console.WriteLine("请输入你喜欢的课程");
string lessonTwo = Console.ReadLine();
lessonTwo = lessonTwo.ToUpper();
//lessonTwo = lessonTwo.ToLower();
if (lessonOne.Equals(lessonTwo,StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("相同");
}
else
{
Console.WriteLine("不同");
}
Console.ReadKey();
str.Split():分割字符串,返回字符串类型的数组。
string s = "a b dfd _ + = ,,, fdff";
char[] chs = { ' ', '_', '=', '+', ',' };
string[] str = s.Split(chs, StringSplitOptions.RemoveEmptyEntries);
Console.ReadKey();
str.Replace():字符串替换。
str.Contains():判断字符串中是否含有子串value。
string str = "国家关键人物老赵";
if (str.Contains("老赵"))
{
str = str.Replace("老赵", "**");
}
Console.WriteLine(str);
Console.ReadKey();
str.SubString():截取字符串,在截取的时候包含要截取的那个位置。
string str = "今天天气好晴朗,处处好风光";
str = str.Substring(1, 2);
Console.WriteLine(str);
Console.ReadKey();
str.StartsWith():判断字符串中是否以子串value开始。
str.EndWith():判断字符串中是否以子串value结束。
string str = "今天天气好晴朗,处处好风光";
if (str.StartsWith("今天"))
{
Console.WriteLine("yes");
}
else
{
Console.WriteLine("no");
}
Console.ReadKey();
str.IndexOf():取子串value第一次出现的位置,如果没有返回-1。
str.LastIndexOf():取子串value最后一次出现的位置,如果没有返回-1。
string str = "今天天气好晴朗,处处好风光";
int ind = str.IndexOf('天', 2);
Console.WriteLine(ind);
Console.ReadKey();
string str = "今天天气好晴朗,处处好风光";
int ind = str.LastIndexOf('天');
Console.WriteLine(ind);
Console.ReadKey();
str.Trim():去掉字符串中前后的空格。
str.TrimEnd():去掉字符串中结尾的空格
str.TrimStart():去掉字符串中前面的空格。
string str = " hahahaha ";
//str.Trim();
str = str.TrimStart();//去前面
str = str.TrimEnd();//去结尾
Console.Write(str);
Console.ReadKey();
string.IsNullOrEmpty():判断是否为空。
string str = null;
if (string.IsNullOrEmpty(str))
{
Console.WriteLine("yes");
}
else
{
Console.WriteLine("no");
}
Console.ReadKey();
string.Join():将数组按照指定的字符串分割连接,返回一个字符串。
string[] names = { "zs", "ls", "ww", "zl", "tq" };
//zs|ls|ww|zl|tq
string str = string.Join("|", names);
Console.WriteLine(str);
Console.ReadKey();
1.接收用户输入的字符串,将其中的字符以输入相反的顺序输出。“abc”→“cba”
Console.WriteLine("请输入字符串");
string s1 = Console.ReadLine();
char[] chs = s1.ToCharArray();//转成字符数组
Array.Reverse(chs);//反转数组
s1 = new string(chs);//再转成字符串
Console.WriteLine(s1);
Console.ReadKey();
2.接收用户输入的一句英文,将其中的单词以反序输出“hello c sharp”→“sharp c hello”
Console.WriteLine("输入一句英文,我将反转它");
string s2 = Console.ReadLine();
string[] word = s2.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
Array.Reverse(word);//for交换length/2
string ns = string.Join(" ", word);
Console.WriteLine(ns);
Console.ReadKey();
3.从emali中提取出用户名和域名:[email protected]
Console.WriteLine("输入一个email");
string email = Console.ReadLine();
int at = email.IndexOf('@');
string name = email.Substring(0, at);
string web = email.Substring(at + 1);
Console.WriteLine(name);
Console.WriteLine(web);
Console.ReadKey();
4.文本文件中存储了多个文章标题、作者。标题和作者之间用若干个空格隔开,每行一个,标题有的长有的短,输出到控制台的时候最多标题长度10。如果超过10,则截取长度8的子串并且最后添加...,加一个|后输出作者的名字。
string path = @"C:\Users\Flame Master\Desktop\1.txt";
string[] contents = File.ReadAllLines(path);
for (int i = 0; i < contents.Length; i++)
{
string book = "";
string name = "";
int fkg = contents[i].IndexOf(' ');//判断书名结尾位置
int lkg = contents[i].LastIndexOf(' ');//判断作者姓名位置
if (fkg - 1 > 10)
{
book = contents[i].Substring(0, 8) + "...";
}
else
{
book = contents[i].Substring(0, fkg);
}
name = "|" + contents[i].Substring(lkg + 1);
contents[i] = book + name;
Console.WriteLine(contents[i]);
}
Console.ReadKey();
5.让用户输入一句话,找出所有e的位置
Console.WriteLine("请输入一句带e的话");
string s = Console.ReadLine();
int index = s.IndexOf('e');
Console.WriteLine("第1次出现e的位置是{0}", index);
int count = 1;
while (index != -1)
{
count++;
index = s.IndexOf('e', index + 1);
if (index == -1)
{
break;
}
Console.WriteLine("第{0}次出现e的位置是{1}", count, index);
}
Console.ReadKey();
6.让用户输入一句话,判断这句话中有没有邪恶,如果有,替换成**然后输出。
Console.WriteLine("请输入一句话");
string str = Console.ReadLine();
if (str.Contains("邪恶"))
{
str = str.Replace("邪恶", "**");
}
Console.WriteLine(str);
Console.ReadKey();
7.把{"诸葛亮","鸟叔","卡卡西","卡哇伊"}变成诸葛亮|鸟叔|卡卡西|卡哇伊",再吧|切割掉。
string[] fg = { "诸葛亮", "鸟叔", "卡卡西", "卡哇伊" };
string fgstr = string.Join("|", fg);
string[] fgnew = fgstr.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
//Console.WriteLine(fgstr);
Console.ReadKey();