0

我有一个简单的问题,但我从今天早上就开始了......

我怎样才能在List<T>不知道它的类型的情况下初始化一个?或者(也许更简单)我可以做一个OrderByon aGridView.DataSource吗?

这是我此刻的代码:

Type type = (from asm in AppDomain.CurrentDomain.GetAssemblies()
             from item in asm.GetTypes() 
             where item.IsClass && item.Name.Equals(myType) 
             select item).Single();
PropertyInfo property = type.GetProperty(myProperty);

this.DataSource = ((List<object>)this.DataSource)
                  .ConvertAll(item => Convert.ChangeType(item, type))
                  .OrderBy(item => type.InvokeMember(property.Name, BindingFlags.GetProperty, null, item, null));

欢迎任何建议:)

编辑:也许我需要告诉你第一次演员(List<object>)this.DataSource失败了,我需要一些东西来(List<myType>)this.DataSource代替。

4

3 回答 3

1

假设您正在IConvertibleitem's 类型实现,这应该有效:

this.DataSource = ((IEnumerable<object>)this.DataSource).ToList()
    .ConvertAll(item => Convert.ChangeType(item, type))
    .OrderBy(item => property.GetValue(item));
于 2013-07-24T11:01:10.003 回答
1

Alex Filipovici 的另一种方法是使用通用方法和表达式:

public class Shadam
{
    object DataSource { get; set; }
    public void OrderList(string myType, string myProperty)
    {
        Type type = (from asm in AppDomain.CurrentDomain.GetAssemblies()
                     from item in asm.GetTypes()
                     where item.IsClass && item.Name.Equals(myType)
                     select item).Single();

        var property = type.GetProperty(myProperty);
        typeof(Shadam).GetMethod("OrderGenericList")
                      .MakeGenericMethod(type, property.PropertyType)
                      .Invoke(this, new[] { property });
    }

    public void OrderGenericList<T, TProperty>(PropertyInfo property)
    {
        var tParameter = Expression.Parameter(typeof(T));
        var orderExpression = Expression.Lambda<Func<T, TProperty>>(
                                  Expression.Property(tParameter, property),
                                  tParameter
                              ).Compile();

        this.DataSource = ((List<T>)this.DataSource).OrderBy(orderExpression);
    }
}
于 2013-07-24T11:17:08.377 回答
0

在分配数据源之前排序列表不是更容易吗?还是使用 GridView.Sort?

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.sort.aspx

于 2013-07-24T10:44:34.290 回答