Default condition in Inline If statement
我正在获取C代码中的数据库行。行包含3个不同的标志(3列的值为真或假)。这些列中只有一列是真的,这将决定该对象的类型。如何在一行代码中确定该对象的类型。如果这三个标志都是假的,那么我需要一个默认类型。
1 2 3 4 5 6 7 8 9 | var myObject = this.unitOfWork.myRepository.GetMeObject(); var objectType = myObject .IsA == true ?"A" : myObject .IsB == true ?"B" : myObject .IsC == true ?"C" :"D"; |
如果所有条件都无效,则objectType应为d
任何建议都将不胜感激。
谢谢
就我个人而言,我想为您的数据库对象创建一个扩展方法。像这样:
1 2 3 4 5 6 7 | public static string GetObjectTypeOrDefault(this MyObject myObject) { if(myObject.IsA) return"A"; if(myObject.IsB) return"B"; if(myObject.IsC) return"C"; return"D"; } |
然后您可以这样使用它:
1 2 | MyObject myObject = this.unitOfWork.myRepository.GetMeObject(); string objectType = myObject.GetObjectTypeOrDefault(); |
您甚至可以使用此方法检查
如果您仍然只需要一条线,那么您最初的尝试将正常工作,但可以清除一点:
1 | var objectType = myObject.IsA ?"A" : myObject.IsB ?"B" : myObject.IsC ?"C" :"D"; |
不完全一样,因为我在这里的目标是可读性而不是效率;这对于您系统的未来开发人员来说可能更容易遵循:
1 2 3 4 5 6 7 | var myObject = this.unitOfWork.myRepository.GetMeObject(); string objectType = (myObject.IsA ?"A" :"") + (myObject.IsB ?"B" :"") + (myObject.IsC ?"C" :""); objectType = (objectType =="") ?"D" : objectType; |
或者,作为一个稍微不太可读的单行版本,
1 2 3 4 5 6 | var myObject = this.unitOfWork.myRepository.GetMeObject(); string objectType = (myObject.IsA ?"A" :"") + (myObject.IsB ?"B" :"") + (myObject.IsC ?"C" :"") + ((myObject.IsA || myObject.IsB || myObject.IsC) ?"" :"D"); |
试试这个
1 2 3 4 5 6 7 | var objectType = ((myObject.IsA) ?"A" : ((myObject.IsB) ?"B" : ((myObject.IsC) ?"C" :"D"))); |