var boxnum = "1,2,3,4,5,6,7,8,9,10,";
var ssd = boxnum.Split(',').Where(p => !string.IsNullOrEmpty(p.Trim())).Max(); 输出的是 9
我想获取这里面的最大值结果用 boxnum.Split(',').Max()得出的最大值是9.结果不对。 由于split后结果是生成是数组形式的数据,查询了下原因由于是字符串比较,9大于10,第一个字符为“1”.
split后结果是生成是数组形式的数据:
经过问我的笨哥还有查询解决方法如下:利用 来转换,
ConvertAll 将当前 List 中的元素转换为另一种类型,并返回包含转换后的元素的列表
publicList<TOutput> ConvertAll<TOutput> (Converter<T,TOutput> converter)
调用委托 System.Converter<TInput,TOutput> publicdelegate TOutputConverter<TInput, TOutput>(TInput input); 将对象从一种类型转换为另一种类型的方法 |
标准委托 |
publicstaticvoid Main() { List<string> ls =newList<string>() {"1","2","3" };
//System.Converter<string, int> cw=new Converter<string,int>(stringToint); //List<int> li = ls.ConvertAll<int>(cw);
List<int> li= ls.ConvertAll<int>(stringToint);
} publicstaticint stringToint(string s) { returnint.Parse(s); } |
匿名方法 |
List<string> ls =newList<string>() {"1","2","3" }; List<int> li = ls.ConvertAll<int>(delegate(string s) { return int.Parse(s); }); |
Lambda表达式 |
List<string> ls =newList<string>() {"1","2","3" }; List<int> li = ls.ConvertAll<int>(i=>int.Parse(i)); |
集合扩展方法 |
List<string> ls =newList<string>() {"1","2","3" }; // System.Collections.Generic.IEnumerable<int> li = ls.Select(i => int.Parse(i)); ; var li = ls.Select(i=>int.Parse(i)); |
staticvoid Main(string[] args) { List<string> ls =newList<string>() {"1","2","3" }; List<string> li = ls.ConvertAll<string >(stringAdd); }
publicstaticstring stringAdd(string s) { return s+"wxd"; } |
详细地址 http://www.cnblogs.com/foundation/archive/2009/01/05/1369371.html 感谢
var boxnum = "1,2,3,4,5,6,7,8,9,10,";
方法一:
var test1 = boxnum.Split(',').Where(p=>!string.IsNullOrEmpty(p.Trim())).ToList().ConvertAll<int>(p => int.Parse(p));
取得数据为:
可以直接 test1.Max()或者
var test1 = boxnum.Split(',').Where(p=>!string.IsNullOrEmpty(p.Trim())).ToList().ConvertAll<int>(p => int.Parse(p)).Max();
结果response:10
方法二:
List<int> result = new List<string>(boxnum.Split(',').Where(p => !string.IsNullOrEmpty(p.Trim()))).ConvertAll(i => int.Parse(i));
取得数据效果图和方法一一样。就不贴图了
resulut.Max() =》response:10
方法三:
int max = 0; var rtn = from b in (from a in boxnum.Split(',') where !string.IsNullOrEmpty(a.Trim()) select new { IsInt = int.TryParse(a, out max), Str = a }) where b.IsInt select int.Parse(b.Str);
resulut.Max() =》response:10
补充老曹给的例子:
方法四:
var ssss = boxnum.Split(',').Where(p => !string.IsNullOrEmpty(p.Trim())).Select(x => int.Parse(x)).Max();
输出10
方法五:
var sdd = boxnum.Split(',').Where(p => !string.IsNullOrEmpty(p.Trim())).OrderBy(x => x.Length).ThenBy(x => x).First(); =>Last();
First() 输出最小值 1
Last() 输出最大值10
以上5种方法如果出现 数字以外的字符,那样写法就会报错的。则可以使用OfType<T>()
PS:
如果object数组中有整数和字符串,现在想找出其中最大的数则用【OfType<T>():用来将序列中可以转换的转换为指定的序列】
object[] test= {1,233,4,5,555,"cc","dff" };
int max=test.OfType<int>().Max();
//获取从数据库中取出的数据(假设只有一条记录) DataTable的话则用【Cast<T>()用来将非泛型的序列转换为泛型的序列】
DataTable dt=new DataTable();
DataRow row=dt.Rows.Cast<DataRow>().Single();