关于c#:Inline If语句中的默认条件

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();

您甚至可以使用此方法检查null对象

如果您仍然只需要一条线,那么您最初的尝试将正常工作,但可以清除一点:

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")));