C# ToString常用技巧总结
ToString是在开发中最常用的操作,其作用是将其它类型以字符串类型表示。例如:
int i=2;
i.ToString() //”2″
Object o = new Object();
o.ToString(); // 返回对象类型 System.Object
但是ToString也并非就这么简单。因为ToString实现自Object类,而Object类是一切类的基类。其它的类继承自Object,自然也就实现了ToString方法。但是也可以重写ToString方法。这也就衍生了其它的使用。如果我们运用合理的话,将会使我们的开发非常的方便。例如在开发中常用到的:
一.格式化输出,包含值类型,DateTime,GUID等,ToString()中接受参数,根据参数输出指定格式。
为实现格式化输出,在相关的类型中,重写ToString()为
public string ToString(string format) format 接收的参数,按指定的格式输出。接受参数,如”C”,”D”,”E”,”等.
public string ToString(string format,IFormatProvider provider) format 接收的参数,provider 为语言文化 如zh-CN 表示中文,en-US 表示美国英语
1.值类型,有时我们需要将值类型按照格式化输出,如输出为货币类型,我们只需要在ToString()中指定format为”C”,如果需要输出美元符号,可以将provider指定为en-US,例如
float f = 2000.12f;
f.ToString(“c”, CultureInfo.CreateSpecificCulture(“en-US”)); //输出为$2,000.12
值类型中常用的参数有:
| 格式化参数 | 说明 |
| C | 货币符号 |
| D | 十进制表示,后跟数字表占位符 如25.ToString(“D3”) ; =025
等价于 25.ToString(“000”); |
| N | 易读性数值表示法 ,用逗号分隔大型数值。如
123456.ToString(“N”); //123,456 |
| P | 百分号 |
| X | 数值的16进制表示,X后跟数字表示用几位表示16进制。如10.ToString(“X8”); //0000000A |
| F | 指定小数点位置,四舍五入 |
| E | 指数表示,后跟数字表示小数点位数 |
| G | 数值的一般表示格式,后跟数字为截取数值长度 |
我们可以用代码测试格式化参数的使用,如下所示:
string[] formatTypes = {"C","N","P","F2","E2","G4"};
double d = 1234.6789;
foreach(string type in formatTypes)
{
Console.WriteLine(string.Format("{0}.ToString(\"{1}\")={2}",d,type,d.ToString(type)));
}
测试输出

2.DateTime,格式化参数主要用于日期时间的格式化输出。DateTime.Now的默认格式为G。参数有一部分区分大小写。如下所示
使用的代码
string[] dateTimeTypes = { "d", "D", "f", "F", "g", "G", "m","M", "o", "O",
"R","r", "s", "t", "T", "u", "U", "y","Y" };
foreach(string type in dateTimeTypes)
{
Console.WriteLine(string.Format("{0}:{1}", type.PadLeft(,' '),DateTime.Now.ToString(type, CultureInfo.CreateSpecificCulture("zh-CN")))); //设置中国的日期格式
}
测试输出:

3.GUID,GUID为在开发过程中常用来代表唯一标示。在GUID 类型中,格式化参数主要有:
string[] guidTypes={"N","D","B","P","X"};
foreach(string type in guidTypes)
{
Console.WriteLine(string.Format("{0}",Guid.NewGuid().ToString(type).PadLeft(,' ')));
}
输出结果:

二.ToString的重写,C#中的任何对象都继承了ToString()方法。在自定义类中如果需要重写ToString()方法,只需要在类中加入:
public override string ToString(){}
而支持格式化参数的ToString()需要继承IFormattable接口,并实现
public string ToString(string format,IFormatProvider provider)方法
下面以People,Peoples类说明如何重写ToString()。本例只是说明ToString()的用法,所以并没有与数据库交互。
class People
{
public People(string name,string address)
{
this.Name = name;
this.Address = address;
}
public string Name { set; get; }
public string Address { set; get; }
} class Peoples:IEnumerable,IFormattable
{
private List<People> _peoples;
private StringBuilder _sb;
public Peoples()
{
_peoples = new List<People>();
}
public void Add(People people)
{
_peoples.Add(people);
}
public IEnumerator GetEnumerator()
{
foreach(People p in _peoples)
{
yield return p;
}
}
//重写ToString()
public override string ToString()
{ return GetContent(_peoples);
}
//重写带参ToString()
public string ToString(string format)
{
return ToString(format, CultureInfo.CreateSpecificCulture("zh-CN"));
}
//重写带参ToString()
public string ToString(string format, IFormatProvider provider)
{
IEnumerable<People> ps = _peoples;
if (format.ToUpperInvariant() == "B")
{
ps = from p in _peoples where p.Address == "北京" select p;
}
else if (format.ToUpperInvariant() == "S")
{
ps = from p in _peoples where p.Address == "上海" select p;
}
return GetContent(ps);
}
private string GetContent(IEnumerable<People> peoples)
{
_sb = new StringBuilder();
foreach(People p in peoples)
{
_sb.AppendLine(string.Format("{0}:{1}", p.Name, p.Address));
}
return _sb.ToString();
}
}
static void Main(string[] args)
{
Peoples peoples = new Peoples(){new People("zhangsan","北京"),new People("lisi","上海"),new People("wangwu","北京"),new People("naliu","北京")};
Console.WriteLine("本站会员有:");
Console.WriteLine(peoples.ToString());
Console.WriteLine("北京的会员有:");
Console.WriteLine(peoples.ToString("B"));
Console.WriteLine("上海的会员有:");
Console.WriteLine(peoples.ToString("S"));
Console.ReadLine();
}
输出结果:

C# ToString常用技巧总结的更多相关文章
- JavaScript常用技巧总结(持续添加中...)
在我学习过程中收集的一些常用技巧: typeof x !== undifined 判断x是否已定义: x === Object(x) 判断x是否为对象: Object.keys(x).length ...
- C# Datetime类常用技巧
C#类常用技巧 //今天DateTime.Now.Date.ToShortDateString();//昨天,也就是今天的日期减一DateTime.Now.AddDays(-1).ToShortDat ...
- Freemarker的常用技巧总结
Freemarker的常用技巧总结 Freemarker视频教程 1,截取字符串 有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的例子就可以自定义显示的长度 < lt. ...
- 【Java】Debug断点调试常用技巧
Debug操作技巧 Show Execution Point 将光标回到当前断点停顿的地方 Step Over 执行当前行代码,并将运行进度跳转到下一行. Step Into 进入到当前代码行的方法内 ...
- 【shell 大系】Linux Shell常用技巧
在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...
- oracle存储过程常用技巧
我们在进行pl/sql编程时打交道最多的就是存储过程了.存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识.如:游标的处理,异常的处理,集 ...
- Vim 常用技巧:
Vim 常用技巧: 将回车由默认的8个空格改为4个空格: 命令:set sw=4 修改tab为4空格: 命令:set ts=4 设置每一级的缩进长度: 命令:set shiftwidth=4 设置文件 ...
- JS~~~ 前端开发一些常用技巧 模块化结构 &&&&& 命名空间处理 奇技淫巧!!!!!!
前端开发一些常用技巧 模块化结构 &&&&& 命名空间处理 奇技淫巧!!!!!!2016-09-29 17 ...
- Android ListView 常用技巧
Android ListView 常用技巧 Android TextView 常用技巧 1.使用ViewHolder提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每 ...
随机推荐
- 正则表达式的先行断言(lookahead)和后行断言(lookbehind)
正则表达式的先行断言和后行断言一共有4种形式: (?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion) (?!pattern) 零宽 ...
- IronPython fail to add reference to WebDriver.dll
在使用Ironpython引用WebDriver程序集做web自动化时碰到这个问题,出问题的代码很简单,如下: import sys import clr clr.AddReferenceToFile ...
- github 上的pull request总结
自己先要fork别人的代码. 然后把代码git clone到本地.. 当自己有提交的时候, 可以在git commit之后 git push origin master 然后这份git push or ...
- Java编程-第一个Java程序
Java编程用到的IDE是Eclipse. 关于第一个Java程序实现的简单流程: (1) 下载eclipse (2) File-New-Java Project 命名工程名字:Hello ...
- hdoj 2524 矩形A + B【递推】
矩形A + B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- [置顶] Android布局管理器 - 详细解析布局实现
布局管理器都是以ViewGroup为基类派生出来的; 使用布局管理器可以适配不同手机屏幕的分辨率,尺寸大小; 布局管理器之间的继承关系 : 在上面的UML图中可以看出, 绝对布局 帧布局 网格布局 相 ...
- sql 视图 按where条件多个字段取一个 分类: SQL Server 2014-12-01 14:09 308人阅读 评论(0) 收藏
首先介绍一下 Case ..When...Then..End 的用法: CASEJiXiaoFind_RowID WHEN '1' THENJiXiao_Money1 WHEN '2' THEN ...
- nrf51822蓝牙芯片ble_app_proximity程序总结
近期由于钥匙的事情,研究了下官方自带的ble_app_proximity程序,事实上就是跟防丢有关系的程序. 同一时候也发现了看nordic程序的一些门道,主要还是看协议栈里面的一些service,首 ...
- [Unity3D]Unity3D游戏开发之自己主动寻路与Mecanim动画系统的结合
大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 这段时间博主将大部分的精力都放在了研究官方演示样例项目上,主要是希望能够从中挖掘出有价值的东 ...
- spring mvc DispatcherServlet详解之四---视图渲染过程
整个spring mvc的架构如下图所示: 现在来讲解DispatcherServletDispatcherServlet的最后一步:视图渲染.视图渲染的过程是在获取到ModelAndView后的过程 ...