1

嗨说我有一个类 PaymentGroup,一个 PaymentGroup 有一个付款列表。每笔付款都有一个代码。

规则是组内的所有付款必须具有相同的代码。

我想以某种方式获取 PaymentGroup 的代码,但如果 PaymentGroup 中的 Payments 并非都具有相同的代码,则会引发异常。

我到目前为止的代码是 PaymentGroup 中的一个属性:

public Code
{
  get
  {
    var codesTheSame = Payments.Select(x => x.Code)
                              .Distinct()
                              .Count() == 1;

    if(!codesTheSame)
      throw Exception();

    return Payments.First().Code;
  }
}

我认为这可以写得更干净,但我没有想出任何替代方案。

有任何想法吗?

4

4 回答 4

3

为什么不这样:

public Code
{
    get {
        return Payments.Select(x => x.Code)
                              .Distinct()
                              .Single();
    }
}

如果它包含超过 1 个代码,这将引发InvalidOperationException并显示消息“序列包含多个元素”。

于 2013-05-15T23:43:05.330 回答
1
var firstCode = Payments.First().Code;

if (Payments.Any(p => p.Code != firstCode))
    throw Exception();

return firstCode;

如果发现与第一个不匹配的付款,这将提前终止,并且如果所有代码都相同,则不必再次枚举付款。

于 2013-05-15T23:45:18.313 回答
0
var groups = Payments.GroupBy(p => p.Code).ToList();
if(groups.Count > 1) throw new Exception("Multiple codes in group");
else if(groups.Count == 1) return groups[0].Key
else {
    //Payments is empty
}
于 2013-05-15T23:41:47.957 回答
0

你可以回到基础(假设你的意思是一个实际的 List<Payment>):

var code = Payments[0].Code;
for (int i = 1; i < Payments.Count; i++) {
    if (Payments[i].Code != code) {
         throw new Exception();
    }
}
return code;
于 2013-05-16T00:04:48.077 回答