我在c#代码中获取数据库行。 Row包含3个不同的标志(3列具有true或false值)。这些列中只有一列为真,这将决定该对象的类型。如何在一行代码中确定该对象的类型。如果所有三个标志都是假的,那么我需要一个默认类型。
var myObject = this.unitOfWork.myRepository.GetMeObject();
var objectType = myObject .IsA == true
? "A"
: myObject .IsB == true
? "B"
: myObject .IsC == true
? "C"
: "D";
如果条件均无效,则ObjectType应为D
任何建议都将不胜感激。
由于
答案 0 :(得分: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";
答案 1 :(得分: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");
答案 2 :(得分:-1)
试试这个
var objectType = ((myObject.IsA)
? "A"
: ((myObject.IsB)
? "B"
: ((myObject.IsC)
? "C"
: "D")));