C#通用字符串解析

来源:互联网 发布:ccs-5.3是什么软件 编辑:程序博客网 时间:2024/06/05 06:51

问题--糟糕的 tryParse()

var someStringThatShouldBeAnInt = "10";int i = 0;if(int.TryParse(someStringThatShouldBeAnInt, out i)){    //Continue on with things}else{    //Complain about it} 
解决:

public static T Parse<T>(this string thingToParse){    var retType = typeof(T);    var tParse = retType.GetMethod("TryParse",                                   BindingFlags.Public | BindingFlags.Static, null,                                   new[] { typeof(string), retType.MakeByRefType() }, null);    if (tParse != null)    {        var parameters = new object[] { thingToParse, null };        var success = (bool)tParse.Invoke(null, parameters);        if (success)        {            return (T)parameters[1];        }    }    return default(T);}
当类型不被tryParse() 支持时,如

var csv = "1,2,3,4,5,6,7";var list = someStringThatShouldBeAnInt.Parse<List<string>>();
上面的代码将没有作用,但我们可以这样:

public static T Parse<T>(this string thingToParse, Func<string, T> parser){    return parser.Invoke(thingToParse);}
用下面的代码代替上面的代码:

var csv = "1,2,3,4,5,6,7";var list = csv.Parse<List<string>>(x => x.Split(',').ToList());






0 0