我有一个简单的类,其中包含 4 个像这样的双属性
public MyClass
{
public MyClass(double all = 0)
{
Top = Bottom = Left = Right = all;
}
public MyClass(double lr = 0, double tb = 0)
{
Top = Bottom = tb;
Left = Right = lr;
}
public MyClass(double l = 0, double r = 0, double t = 0, double b = 0)
{
Top = t;Bottom = b;Left = l;Right = r;
}
public double Top {get; private set;}
public double Bottom {get; private set;}
public double Left {get; private set;}
public double Right {get; private set;}
}
是否有一种简单的方法来检查所有属性是否具有相同的值?我宁愿不使用 if (Top == Bottom) && (Top == Left) ...
因为恕我直言,它有点乱。可以在 LINQ 中完成吗?
最佳答案
LINQ 适用于集合。您没有集合,您有四个独立的属性。
任何将其强加到 LINQ 中的操作只会使它变得更加困惑。
只需使用普通的旧 C#:
public bool AllPositionsEqual
{
get
{
return Top == Bottom
&& Left == Right
&& Left == Top;
}
}
这对你来说很清楚,当其他读者阅读它时对他们来说很清楚,当你在几个月后阅读它时对你也很清楚。
如果您要将属性填充到集合中只是为了能够对其调用 LINQ 方法以确定它们是否相同,那么您是违反了“原则”最少的惊讶”。该代码的读者会“WTF”。
相反,如果您希望能够在任意类上执行此操作(这也是一个非常令人困惑的要求),您可以这样做:
- 使用反射获取所有属性
- 获取集合中此实例的所有属性值
- 在此集合上,调用
Distinct()
。
然后您将拥有 LINQ 的合法用例。现在,你还没有。
关于c# - 查找类中的所有属性是否相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34333548/