这篇博客参照http://www.cnblogs.com/insus/archive/2013/08/08/3247078.html
题目是这样的:
一个txt文件,内容格式:
39.4% 2013-07-09 15-38-79
35.7 2013-08-09 15-38-59
39.4% 2013-07-09 15-38-79
35.7 2013-08-09 15-38-59
39.4% 2013-07-09 15-38-79
35.7 2013-08-09 15-38-59
39.4% 2013-07-09 15-38-79
35.7 2013-08-09 15-38-59
39.4% 2013-07-09 15-38-79 35.7 2013-08-09 15-38-59
现在要想这样输出:
|39.4%|2013-07-0915-38-79|35.7|2013-08-0915-38-59|
|35.7|2013-08-0915-38-59|39.4%|2013-07-0915-38-79|
|35.7|2013-08-0915-38-59|35.7|2013-08-0915-38-59|
直接贴代码:我的代码跟原帖由些不同。我的代码中用的是ref(不需先赋值,out得先赋值),另外我这里一个方法用的是静态函数,一个用非静态,其实道理都是一样。
class Program { static void Main(string[] args) { string[] lines = File.ReadAllLines("../../ReadLineToAnotherTypeOfShow.txt"); List<ChangeClass> ccList=new List<ChangeClass> (); ChangeClass ccItem = null; foreach(string line in lines) { //方法一 //ChangeClass cc = new ChangeClass(); //cc.TryParse(line,ref ccItem); //方法二 if( ChangeClass2.TryParse(line,ref ccItem)) ccList.Add(ccItem); } for (int i = 1; i < ccList.Count;i=i+2 ) { Console.WriteLine("|"+ccList[i-1]+"|"+ccList[i]+"|"); } Console.ReadKey(); } } partial class ChangeClass { protected string e1; protected string e2; public ChangeClass() { } public ChangeClass(string e1,string e2) { this.e1 = e1; this.e2 = e2; } public bool TryParse(string singelLine,ref ChangeClass item) { if (string.IsNullOrEmpty(singelLine.Trim())) { return false; } string[] array = singelLine.Trim().Split(' '); if (array[0] == "" || array[1] == "" || array[2] == "") return false; e1 = array[0].ToString(); e2 = array[1] + array[2].ToString(); item = new ChangeClass(e1,e2); return true; } public override string ToString() { return "" + e1 + "|" + e2 + ""; } } partial class ChangeClass2 { protected static string E1; protected static string E2; public ChangeClass2(string e1, string e2) { E1 = e1; E2 = e2; } public static bool TryParse(string singelLine, ref ChangeClass item) { if (string.IsNullOrEmpty(singelLine.Trim())) { return false; } string[] array = singelLine.Trim().Split(' '); if (array[0] == "" || array[1] == "" || array[2] == "") return false; E1 = array[0].ToString(); E2 = array[1] + array[2].ToString(); item = new ChangeClass(E1, E2); return true; } public override string ToString() { return "" + E1 + "|" + E2 + ""; } }
总结上面的几个知识点:1。从changclass2可以发现,其实静态变量也是可以通过构造函数赋值的。
2、我们也可以通过静态的类型构造函数对静态赋值,但是,不能有参数,形如: static ChangeClass2(){E1=10;}//
通过静态变量赋值,必须是常量。
3、ref和out都引用同一个内存块,不同是,声明ref的变量不需赋值,而out变量要提前赋值;
4.这个方法中还有一种思想:
通过foreach和迭代器结合,操作数组。我们通过在classchange类中重写头string()方法,导致在main()中调用console.writline(classchange的实例),会直接调用重写的头string()方法,从而输出我们自己想要的结果;