嗨说我有一个班级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;
}
}
我认为这可以写得更干净但我还没有提出任何替代方案。
有什么想法吗?
答案 0 :(得分:3)
为什么不能这样:
public Code
{
get {
return Payments.Select(x => x.Code)
.Distinct()
.Single();
}
}
如果它包含多个代码,这将抛出 InvalidOperationException ,并显示消息“ Sequence包含多个元素”。
答案 1 :(得分:1)
var firstCode = Payments.First().Code;
if (Payments.Any(p => p.Code != firstCode))
throw Exception();
return firstCode;
如果找到与第一个不匹配的付款,这将提前终止,如果所有代码相同,则不必再次枚举付款。
答案 2 :(得分: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
}
答案 3 :(得分: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;