在orderby中将无效整数解析为null
本文关键字:null 整数 无效 orderby | 更新日期: 2023-09-27 18:00:31
var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text };
list = list.OrderBy(x => int.Parse(x)).ToArray();
有人能建议如何修改上面的代码,以便为每个未能解析为整数的值返回一个null值吗?
我想我需要用TryParse
替换Parse
?
澄清:
该程序从3个不同的文本框中接受3个整数,对它们进行排序,并将序列插入数据库。如果输入了一个非整数,我想把它当作一个空值。
例如,如果TextBox1.Text = ""
、TextBox2.Text = "45"
和TextBox3.Text = "8"
,则插入的序列将为:0,8,45
。
然而,我现在认为从排序中排除非整数可能更好,因此对于同一个示例,结果序列将类似于:8,45,N/A
。
很抱歉不能清楚地解释我的要求。
如果你真的在使用LINQ to Objects,我会写一个单独的方法:
public static int? ParseOrNull(string text)
{
int result;
return int.TryParse(text, out result) ? (int?) result : null;
}
然后:
list = list.OrderBy(x => ParseOrNull(x)).ToArray();
这将处理文本值,这些值要么是对非数字的真正字符串引用,要么是空引用。您可能需要重载ParseOrNull
以接受IFormatProvider
。
然而,这只是通过可为null的int对进行排序。如果您想要无效的用null替换的值,但其他值保留为字符串(按数值排序(,我怀疑您想要更类似的东西:
var result = list.Select(x => new { Text = x, Numeric = ParseOrNull(x) })
.OrderBy(pair => pair.Numeric)
.Select(pair => pair.Numeric.HasValue ? pair.Text : null)
.ToArray();
如果这两者都不符合您的要求,请澄清您的要求。
请注意,这些都不能与LINQ to SQL或实体框架之类的东西一起使用,因为它们无法将您的方法转换为SQL。
试试这个:
var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text };
list = list.OrderBy(x =>
{
int val;
return int.TryParse(x, out val) ? (int?)val : null;
}).ToArray();
当我了解需求并阅读代码(将结果分配给同一数组(时,您仍然希望字符串作为输出,但按其数值排序,并且您希望在结果数组中无法解析的字符串为null
;
var result =
list
.Select(x => { int tmp; return Int32.TryParse(x, out tmp) ? x : null; })
.OrderBy(x => x);
试试这个:
var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text };
list = list.OrderBy(x => ParseStringToInt(x)).ToArray();
private int ParseStringToInt(string value)
{
int result;
int.TryParse(value, out result);
return result;
}