1

我在我的 c# 代码中获取一个数据库行。行包含 3 个不同的标志(3 列具有真或假值)。这些列中只有一个为真,这将确定该对象的类型。如何在一行代码中确定该对象的类型。如果所有三个标志都是假的,那么我需要有一个默认类型。

var myObject = this.unitOfWork.myRepository.GetMeObject();

 var objectType = myObject .IsA == true
                              ? "A"
                              : myObject .IsB == true
                                    ? "B"
                                    : myObject .IsC == true
                                          ? "C"
                                          : "D";

如果没有一个条件是有效的,那么 ObjectType 应该是 D

任何建议将不胜感激。

谢谢

4

3 回答 3

5

就个人而言,我很想为您的数据库对象创建一个扩展方法。像这样的东西:

public static string GetObjectTypeOrDefault(this MyObject myObject)
{
    if(myObject.IsA) return "A";
    if(myObject.IsB) return "B";
    if(myObject.IsC) return "C";
    return "D";
}

然后你会像这样使用它:

MyObject myObject = this.unitOfWork.myRepository.GetMeObject();
string objectType = myObject.GetObjectTypeOrDefault();

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


如果您仍然只想要一行,那么您最初的尝试将可以正常工作,但可以稍微清理一下:

var objectType = myObject.IsA ? "A" : myObject.IsB ? "B" : myObject.IsC ? "C" : "D";
于 2013-07-12T10:01:47.650 回答
0

不太一样,因为我的目标是可读性而不是效率;对于您系统的未来开发人员来说,这可能更容易理解:

var myObject = this.unitOfWork.myRepository.GetMeObject();

string objectType = (myObject.IsA ? "A" : "") +
                    (myObject.IsB ? "B" : "") +
                    (myObject.IsC ? "C" : "");

objectType = (objectType == "") ? "D" : objectType;

或者,作为一个可读性稍差的单行版本,

var myObject = this.unitOfWork.myRepository.GetMeObject();

string objectType = (myObject.IsA ? "A" : "") +
                    (myObject.IsB ? "B" : "") +
                    (myObject.IsC ? "C" : "") +
                    ((myObject.IsA || myObject.IsB || myObject.IsC) ? "" : "D");
于 2013-07-12T09:56:24.020 回答
-1

尝试这个

            var objectType = ((myObject.IsA)
                                    ? "A"
                                    : ((myObject.IsB)
                                                    ? "B"
                                                    : ((myObject.IsC)
                                                                ? "C"
                                                                : "D")));
于 2013-07-12T09:56:51.347 回答