您好我以前必须使用接口但是我被告知我需要在这个实例中实现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>();
我无法确定如何按门尺寸订购此列表....请帮助
答案 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);