gpt4 book ai didi

c# - 如何让我的通用比较器 (IComparer) 处理空值?

转载 作者:可可西里 更新时间:2023-11-01 08:56:53 24 4
gpt4 key购买 nike

我正在尝试编写一个用于排序的通用对象比较器,但我注意到它不处理它比较的值之一为空的实例。当一个对象为 null 时,我希望它像对待空字符串一样对待它。我已尝试将空值设置为 String.Empty,但随后在调用 CompareTo() 时出现“对象必须是字符串类型”的错误。

public int Compare(T x, T y)
{
PropertyInfo propertyInfo = typeof(T).GetProperty(sortExpression);
IComparable obj1 = (IComparable)propertyInfo.GetValue(x, null);
IComparable obj2 = (IComparable)propertyInfo.GetValue(y, null);

if (obj1 == null) obj1 = String.Empty; // This doesn't work!
if (obj2 == null) obj2 = String.Empty; // This doesn't work!

if (SortDirection == SortDirection.Ascending)
return obj1.CompareTo(obj2);
else
return obj2.CompareTo(obj1);
}

我现在很纠结这个!任何帮助将不胜感激。

最佳答案

您不能将T 视为空字符串,除非您的T 被有效地限制为字符串。您应该 做的是制定一个比较空值的计划。比如

if (obj1 == null && obj2 == null)
return 0;
else if (obj1 == null)
return -1;
else if (obj2 == null)
return 1;
else
return obj1.CompareTo(obj2);

关于c# - 如何让我的通用比较器 (IComparer) 处理空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4852432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com