按大小属性排序通用列表

时间:2011-03-09 09:32:18

标签: c# .net generics

您好我以前必须使用接口但是我被告知我需要在这个实例中实现icomparable。见下文:

internal class doorItem : IComparable
{
    public int CompareTo(doorItem other)
    {
        // The temperature comparison depends on the comparison of the
        // the underlying Double values. Because the CompareTo method is
        // strongly typed, it is not necessary to test for the correct
        // object type.
        return GetNumber(productSize).CompareTo(GetNumber(other.productSize));
    }
    public string variations { get; set; }
    public double pricerange { get; set; }
    public string viewDetailsLink { get; set; }
    public string height { get; set; }
    public string width { get; set; }
    public string productSize { get; set; }
    public string productImage { get; set; }
    public int countItemsOnSale { get; set; }
    public string optionFor35Product { get; set; }
    private int GetNumber(string str)
    {
//this method gets the int out of the string
        int length = str.Length;
        string output = String.Empty;
        int test = 0;
        bool err = false;

        for (int i = 0; i <= length; i++)
        {
            try
            {
                test = Convert.ToInt32(str.Substring(i, 1));
            }
            catch
            {
                err = true;
            }

            if (!err)
                output += str.Substring(i, 1);
            else
                break;
        }

        return Convert.ToInt32(output);
    }
}

上面是我创建的类,门大小返回如下:4dr,5dr,6dr等。然后getnumber方法从字符串中获取int。

我在主方法中的自定义类中有一个通用列表,如下所示:

List<doorItem> d = new List<doorItem>();

我无法确定如何按门尺寸订购此列表....请帮助

2 个答案:

答案 0 :(得分:1)

使用LINQ最简单。那你甚至不需要实现IComparable。

var sortedList = doorList.OrderBy( d => d.GetNumber(d.productSize ).ToList();

GetNumber课程中设置public doorItem

答案 1 :(得分:1)

我不知道性能是否重要,但获取数字的方法非常糟糕,异常只应在特殊情况下使用!建议这样的事情

StringBuilder sb = new StringBuilder();
foreach (char c in str)
{
    if (Char.IsNumber(c))
    {
        sb.append(c);
    }
}
return Convert.ToInt32(sb.ToString());

对于排序,您可以执行stecya建议的操作,或者您可以将此方法转换为属性并直接排序。

public int Size 
{
    get
    {
         return GetNumber(this.productSize);
    }
}
...
d.OrderBy(x=>x.Size);