我已经将对象列表限制为asp:gridview。此列表中的对象包含一些属性和一些对象。列表对象内的一些对象为null。我已经在gridview boundfields上设置了sort表达式,但是在排序时我得到的例子没有设置为object。如何正确排序?我的意思是如何避免在排序中访问空对象?
class A
{
int value {get; set;}
string name {get; set;}
B insideobj;
}
class B
{
}
我尝试对A对象列表进行排序,一列按B对象内的属性排序,但有时B对象在A对象中为null,当它为null时,使用sort expression throw错误进行默认排序。
答案 0 :(得分:0)
通过类型List<A>
的属性对B
进行排序时避免问题的最佳方法是在insideobj
成员A
中没有空引用。您可以使用Null Object pattern并将空对象的实例分配给列表中没有成员值的项目。这样,排序时空引用不再是问题。
null对象是具有中性属性的B
实例(例如string.Empty
而不是null),或者是从B
派生的,以便共享相同的签名。
示例:
class B
{
public string PropertyToSortBy { get; set; }
// Provides the Null object
public static B Empty
{
get
{
// Initialize other properties as required
return new B() { .PropertyToSortBy = string.Empty };
}
}
}
要使用Null对象,您可以更改A
以初始化insideobj
的值:
class A
{
int value {get; set;}
string name {get; set;}
B insideobj = B.Empty;
}
或者,您可以在排序之前更改列表,如下所示:
var list = new List<A>();
// Fill list
// ...
// Fill empty entries
foreach(var item in list.Where(x => x.insideobj == null))
item.insideobj = B.Empty;
// Continue using the list