一、构造对象的时候直接给非方法成员赋值。
C#支持在构类对象的时候对类的非方法成员进行初始化。如果省略这个过程,则所有的非方法成员初始化为缺省值,当然还可以直接在类中给类的成员赋值。例如
public int i = 2;
public int i = 2;
以上做法在C#中是允许的。它的做法虽然和构造对象时初始化效果一致,但是作用范围更广。因为在构造对象时初始化只针对当前的对象,而在类中初始化则对所有即将构造的对象都起作用。
class Test
{
public int data;
private string _str;
public string str
{
set { _str = value; }
get { return _str; }
}
}
class Program
{
static void Main(string[] args)
{
Test obj = new Test() { data = 100, str = "Congratulations! You've gained {0} scores" };
System.Console.WriteLine(obj.str, obj.data);
}
}
二、通过索引器构造二维数组
C#的索引器类似于C++中对索引运算符的重载。
class Test
{
private int[][] arr = new int[2][];
public int[] this[int index]
{
set { arr[index] = value; }
get { return arr[index]; }
}
}
class Program
{
static void Main(string[] args)
{
Test obj = new Test();
obj[0] = new int[2] { 1, 2 };
obj[1] = new int[] { 3, 4, 5, 6};
System.Console.WriteLine("{0}, {1}", obj[0][0], obj[0][1]);
System.Console.WriteLine("{0}, {1}, {2}, {3}",
obj[1][0], obj[1][1], obj[1][2], obj[1][3]);
}
}
三、通过FileStream和StreamReader实现对文件的逐行读取
在Python中文件的逐行读取十分简单,打开文件之后,通过readline函数就可以实现。在C#中需要先定义文件流,然后将该流赋值给一个流的读取器。然后再调用读取器的逐行读取函数来实现。
FileStream file = new FileStream(iniFilePath, FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamReader(file);
while (!reader.EndOfStream)
{
string str = reader.ReadLine();
// todo with line
}
四、通过FileStream和StreamWriter实现字符串写入
类似于文件的逐行读取
FileStream fs = new FileStream(iniFilePath, FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.Write(str);//str为字符串,'\0'结束
五、路径相关的类Path
获取绝对路径:Path.GetFullPath
获取路径中的文件名(包括后缀):Path.GetFileName
获取路径中目录:Path.GetDirectoryName
这三个方法比较有用,应该着重标注。
六、文件夹/文件是否存在
File.Exist/Directory.Exist
七、文件遍历,目录遍历
DirectoryInfo/FileInfo类中的GetDirectories/GetFiles可以实现
或者调用静态方法Directory.GetDirectories(获取所有的完整目录名),DirectoryGetFiles(获取所有文件的完整文件名)
八、文件删除
删除文件:静态方法File.Delete,类方法FileInfo.Delete
删除目录:静态方法Directory.Delete,类方法DirectoryInfo.Delete(可以给Delete方法传递bool参数表明是否删除子文件夹和文件)