C# 排序asp:gridview,它绑定到包含一些空对象的实例的类

C# 排序asp:gridview,它绑定到包含一些空对象的实例的类,c#,asp.net,sorting,gridview,C#,Asp.net,Sorting,Gridview,我已经将一个对象列表绑定到asp:gridview。此列表中的对象包含一些属性和对象。列表对象中的某些对象为空。我已经在gridview边界字段上设置了排序表达式,但在排序时,我得到了实例未设置为object的异常。如何正确排序?我的意思是如何避免在排序时访问空对象 class A { int value {get; set;} string name {get; set;} B insideobj; } class B { } 我尝试对A对象列表进行排序,其中一列按B对象

我已经将一个对象列表绑定到asp:gridview。此列表中的对象包含一些属性和对象。列表对象中的某些对象为空。我已经在gridview边界字段上设置了排序表达式,但在排序时,我得到了实例未设置为object的异常。如何正确排序?我的意思是如何避免在排序时访问空对象

class A
{
   int value {get; set;}
   string name {get; set;}
   B insideobj;
}

class B
{
}

我尝试对A对象列表进行排序,其中一列按B对象内的属性排序,但有时B对象在对象中为null,并且当它为null时,使用排序表达式throw error进行默认排序。

在排序
列表时避免问题的最佳方法是将null对象的实例分配给列表中成员中没有值的项。这样,排序时空引用就不再是问题了

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 };
       }
   }
}
为了使用空对象,您可以更改
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
var list=newlist();
//填写清单
// ...
//填空条目
foreach(列表中的变量项,其中(x=>x.insideobj==null))
item.insideobj=B.为空;
//继续使用列表

您使用C#还是VB.NET?你能发布一个类的示例并描述哪些对象是空的吗?我使用C#。添加了示例代码。谢谢,我已经通过将sort expression设置为空解决了我的问题,并为这一列的大小写实现了我自己的排序函数。您的解决方案也可以工作,但我的问题是我使用了我无权访问的类库,它有时返回空引用对象。无论如何,谢谢你的帮助!