我正在做一个用柱子代表栅栏的项目。每个栅栏正好有两个实现IComparable的柱子,并在每个栅栏中排序。为了在Fence上重写我的CompareTo,我需要比较这个和另一个栅栏之间的post 0;如果结果返回0,那么我需要比较这个和另一个栅栏之间的post 1。我编写了一个简单的for循环来执行这个逻辑,我在下面介绍了这个逻辑。然而,Resharper给了我一个警告,我应该用LINQ替换for循环。有一种简单的方法可以用LINQ替换for循环吗?
public int CompareTo(Fence other)
{
for(int i = 0; i < Posts.Length; i++)
{
int c = Posts[i].CompareTo(other.Posts[i]);
if (c != 0)
return c;
}
return 0;
}发布于 2017-06-02 14:02:46
由于篱笆正好有两个柱子,因此可以将其简化为:
public int CompareTo(Fence other)
{
int c = Post[0].CompareTo(other.Post[0]);
if (c == 0)
c = Post[1].CompareTo(other.Post[1]);
return c;
}请注意,您可以(也可能应该)用Post和“Post1”替换Post0数组。
请注意,这可能会给您一个完全不同的顺序,而不是:
int c = Post[1].CompareTo(other.Post[1]);
if (c == 0)
c = Post[0].CompareTo(other.Post[0]);据推测,这也同样有效。(也就是说,如果这个帖子比别人的小,但它的Post1大,那么围栏是大的还是小的?)
https://stackoverflow.com/questions/44329193
复制相似问题