可以挣钱的网站网络推广方案怎么写
简述
将对象格式化输出为String类型
一、String.Format();
简述
string类自带的静态方法
Code
'剖析一下下面三种结果一样的写法区别在哪里'
var test1 = string.Format("测试1:{0} 中午吃了{1}",name,food);
var test2 = "测试2:" + name + "中午吃了" + food;
var test3 = string.Format("测试1:" + name + "中午吃了" + food);
Code剖析
推荐第一种方式!
- test2、test3中因有 +号,降低了性能,String虽然是引用类型,.Net的特殊处理,String是值类型一样,在每次值的改变,修改内存;
- test1中用的 {},已经定义的方法,本质是StringBuilder,分配缓存……简单的说就是每次值改变,不会重新分配内存;
二、To.String();
简述
重写ToString();
重写无参的ToString();
Code
public override string ToString()
{ return ……;}
重写有参的ToString();
简述
继承接口IFormattable,重写有参ToString();
Code
'继承该接口'
class A : IFormattable
{public string Name { get; set; }
'接口方法ToString()'public string ToString(string format, IFormatProvider formatProvider){var nameArray = Name.Split('#');if("0" == format)return "姓名:" + nameArray[0];if("1" == format)return "武功:" + nameArray[1];return null;}
}
Code结果
其他
如果你想像用常规的ToString()的方法一样,一个参数,可以在上面代码中加入
public string ToString(string format)
{ return ToString(format, null); }
及时你写了这么多ToString(),但仍然想要常规的将19.5转为String,不影响的
IFormatProvider与ICustomFormatter的使用
简述
- 使用方式:这两个接口是连着使用的,类似于工厂模式(下面Code解释)
- 使用目的:上面重写ToString()是为了将对象格式化的输出,但如果有A类、B类、香蕉类,都需要格式化输出,连着各使用一次上面的这两个接口,就无需一个一个继承IFormattable
Code
1.Build一个Class,来继承ICustomFormatter,实现方法Format(),格式化的内容;
class FromatClass : Exception, ICustomFormatter
{public string Format(string format, object arg, IFormatProvider formatProvider){ return "啦啦啦德玛西亚,"; }
}
2.Build一个Class,来继承IFormatProvider,实现方法GetFormat(), 分发者;
class FromatProvider:IFormatProvider
{public object GetFormat(Type formatType){ return new FromatClass(); }
}
3.使用
var B1 = new B {Name = "步惊云"}; //B是和A一样的一个类var result = string.Format(new FromatProvider(), "{0}",B1.Name);
4.结果
5.到了这一步,每个类都格式化同样的内容,如果每个类还想得到不同的呢,可以在Format()中Switch判断,也可以在Format()中return 改为 return “啦啦啦德玛西亚, + arg。ToString()”; ,arg是对象,在这里是B1,然后在B类中按上面的方法重写ToString()即可。
return "啦啦啦德玛西亚," + arg.ToString();
结尾
return的是String,本质是重载ToString();
Code地址
https://code.csdn.net/snippets/1025804