WEB开发网
开发学院软件开发C语言 c#扩展方法奇思妙用高级篇五:ToString(string fo... 阅读

c#扩展方法奇思妙用高级篇五:ToString(string format) 扩展

 2010-09-30 20:52:19 来源:WEB开发网   
核心提示: 测试一下,可OK了:对于简单的值类型属性没问题了,c#扩展方法奇思妙用高级篇五:ToString(string format) 扩展(5),但对于复杂一些类型如,如People的属性Son(Son就是儿子,祖孙三代名字都不错吧(过会先把小天、微天这两个名字注册了)!主要看第4行,format是怎

测试一下,可OK了:

c#扩展方法奇思妙用高级篇五:ToString(string format) 扩展

对于简单的值类型属性没问题了,但对于复杂一些类型如,如People的属性Son(Son就是儿子,我一开始写成了Sun),他也是一个People类型,他也有属性的,而且他也可能有Son...

先看下调用代码吧:

1     People p4 = new People { Id = 1, Name = "鹤冲天", Brithday = new DateTime(1990, 9, 9) };
2     p4.Son = new People { Id = 2, Name = "鹤小天", Brithday = new DateTime(2015, 9, 9) };
3     p4.Son.Son = new People { Id = 3, Name = "鹤微天", Brithday = new DateTime(2040, 9, 9) };
4     string s4 = p4.ToString4("[Name] 的孙子 [Son.Son.Name] 的生日是:[Son.Son.Brithday: yyyy年MM月dd日]。");

“鹤冲天”也就是我了,有个儿子叫“鹤小天”,“鹤小天”有个儿子,也就是我的孙子“鹤微天”。哈哈,祖孙三代名字都不错吧(过会先把小天、微天这两个名字注册了)!主要看第4行,format是怎么写的。下面是版本四实现代码,由版本三改进而来:

 1     public static string ToString4(this object obj, string format)
 2     {
 3         MatchEvaluator evaluator = match =>
 4         {
 5             string[] propertyNames = match.Groups["Name"].Value.Split('.');
 6             string propertyFormat = match.Groups["Format"].Value;
 7 
 8             object propertyValue = obj;
 9             try
10             {
11                 foreach (string propertyName in propertyNames)
12                     propertyValue = propertyValue.GetPropertyValue(propertyName);
13             }
14             catch
15             {
16                 return match.Value;
17             }
18 
19             if (string.IsNullOrEmpty(format) == false)
20                 return string.Format("{0:" + propertyFormat + "}", propertyValue);
21             else return propertyValue.ToString();
22         };
23         string pattern = @"\[(?<Name>[^\[\]:]+)(\s*[:]\s*(?<Format>[^\[\]:]+))?\]";
24         return Regex.Replace(format, pattern, evaluator, RegexOptions.Compiled);
25     }

上一页  1 2 3 4 5 6 7  下一页

Tags:扩展 方法 奇思

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接