c#逻辑中的三元条件未按预期工作

c#逻辑中的三元条件未按预期工作,c#,C#,我在c#中写了一个三元条件,它的计算不正确。我正在检查这两个条件是否都满足,然后它应该返回true,否则返回false。目前,即使有一个条件失败,它也会返回true。因此,即使docType为Flashnotes为true,canView也会设置为true。考虑这个IOC。 始终返回true,docType可能返回true,也可能不返回true doc.canView = IoC.Resolve<IClientAuthorizationService>().Authorize("Pu

我在c#中写了一个三元条件,它的计算不正确。我正在检查这两个条件是否都满足,然后它应该返回true,否则返回false。目前,即使有一个条件失败,它也会返回true。因此,即使docType为Flashnotes为true,canView也会设置为true。考虑这个IOC。 始终返回true,docType可能返回true,也可能不返回true

doc.canView = IoC.Resolve<IClientAuthorizationService>().Authorize("Put", "ManageDocuments") ==
                                  AuthAccessLevel.Full &&  i.DOCUMENT_TYPE_ID != (int) DocumentType.FlashNotes ||
                                                           i.DOCUMENT_TYPE_ID != (int)DocumentType.CallMeetingNotes || 
                                                           i.DOCUMENT_TYPE_ID != (int)DocumentType.OtherNotes || 
                                                           i.DOCUMENT_TYPE_ID != (int)DocumentType.TearSheet
                        ? true
                        : false;
doc.canView=IoC.Resolve().Authorize(“Put”,“ManageDocuments”)==
AuthAccessLevel.Full&&i.DOCUMENT\u TYPE\u ID!=(int)DocumentType.FlashNotes||
i、 文档类型ID!=(int)DocumentType.CallMeetingNotes |
i、 文档类型ID!=(int)DocumentType.OtherNotes |
i、 文档类型ID!=(int)DocumentType.TearSheet
? 真的
:假;

如果我正确理解了这一点,
I.DOCUMENT\u TYPE\u ID
条件之一必须等于
true
?添加括号,使第一个括号相等

doc.canView = IoC.Resolve<IClientAuthorizationService>().Authorize("Put", "ManageDocuments") ==
                              AuthAccessLevel.Full &&  (i.DOCUMENT_TYPE_ID == (int) DocumentType.FlashNotes ||
                                                       i.DOCUMENT_TYPE_ID == (int)DocumentType.CallMeetingNotes || 
                                                       i.DOCUMENT_TYPE_ID == (int)DocumentType.OtherNotes || 
                                                       i.DOCUMENT_TYPE_ID == (int)DocumentType.TearSheet)
doc.canView=IoC.Resolve().Authorize(“Put”,“ManageDocuments”)==
AuthAccessLevel.Full&(i.DOCUMENT\u TYPE\u ID==(int)DocumentType.FlashNotes||
i、 DOCUMENT_TYPE_ID==(int)DocumentType.CallMeetingNotes|
i、 DOCUMENT_TYPE_ID==(int)DocumentType.OtherNotes ||
i、 文档类型(ID==(int)DocumentType.TearSheet)

此外,也没有必要对真实或错误,因为它已经是一个布尔

如果我正确理解了这一点,
I.DOCUMENT\u TYPE\u ID
conditions必须等于
true
?添加括号,使第一个括号相等

doc.canView = IoC.Resolve<IClientAuthorizationService>().Authorize("Put", "ManageDocuments") ==
                              AuthAccessLevel.Full &&  (i.DOCUMENT_TYPE_ID == (int) DocumentType.FlashNotes ||
                                                       i.DOCUMENT_TYPE_ID == (int)DocumentType.CallMeetingNotes || 
                                                       i.DOCUMENT_TYPE_ID == (int)DocumentType.OtherNotes || 
                                                       i.DOCUMENT_TYPE_ID == (int)DocumentType.TearSheet)
doc.canView=IoC.Resolve().Authorize(“Put”,“ManageDocuments”)==
AuthAccessLevel.Full&(i.DOCUMENT\u TYPE\u ID==(int)DocumentType.FlashNotes||
i、 DOCUMENT_TYPE_ID==(int)DocumentType.CallMeetingNotes|
i、 DOCUMENT_TYPE_ID==(int)DocumentType.OtherNotes ||
i、 文档类型(ID==(int)DocumentType.TearSheet)

此外,也没有必要对真实或错误,因为它已经是一个布尔

这是一个操作顺序问题。您可以了解有关订购的更多信息:

doc.canView=IoC.Resolve().Authorize(“Put”,“ManageDocuments”)==
AuthAccessLevel.Full&(i.DOCUMENT\u TYPE\u ID!=(int)DocumentType.FlashNotes&&
i、 DOCUMENT_TYPE_ID!=(int)DocumentType.CallMeetingNotes&&
i、 DOCUMENT_TYPE_ID!=(int)DocumentType.OtherNotes&&
i、 文档类型\u ID!=(int)文档类型.TearSheet)
? true//包含冗余代码,但用于显示三元运算符
:假;

这是一个操作顺序问题。您可以了解有关订购的更多信息:

doc.canView=IoC.Resolve().Authorize(“Put”,“ManageDocuments”)==
AuthAccessLevel.Full&(i.DOCUMENT\u TYPE\u ID!=(int)DocumentType.FlashNotes&&
i、 DOCUMENT_TYPE_ID!=(int)DocumentType.CallMeetingNotes&&
i、 DOCUMENT_TYPE_ID!=(int)DocumentType.OtherNotes&&
i、 文档类型\u ID!=(int)文档类型.TearSheet)
? true//包含冗余代码,但用于显示三元运算符
:假;

我认为这里的逻辑有错误。尝试:

doc.canView = IoC.Resolve<IClientAuthorizationService>().Authorize("Put", "ManageDocuments") ==
                                  AuthAccessLevel.Full &&  !(i.DOCUMENT_TYPE_ID == (int) DocumentType.FlashNotes ||
                                                           i.DOCUMENT_TYPE_ID == (int)DocumentType.CallMeetingNotes || 
                                                           i.DOCUMENT_TYPE_ID == (int)DocumentType.OtherNotes || 
                                                           i.DOCUMENT_TYPE_ID == (int)DocumentType.TearSheet);
doc.canView=IoC.Resolve().Authorize(“Put”,“ManageDocuments”)==
AuthAccessLevel.Full&!(i.DOCUMENT_TYPE_ID==(int)DocumentType.FlashNotes||
i、 DOCUMENT_TYPE_ID==(int)DocumentType.CallMeetingNotes|
i、 DOCUMENT_TYPE_ID==(int)DocumentType.OtherNotes ||
i、 文档类型(ID==(int)DocumentType.TearSheet);

我认为这里的逻辑有错误。尝试:

doc.canView = IoC.Resolve<IClientAuthorizationService>().Authorize("Put", "ManageDocuments") ==
                                  AuthAccessLevel.Full &&  !(i.DOCUMENT_TYPE_ID == (int) DocumentType.FlashNotes ||
                                                           i.DOCUMENT_TYPE_ID == (int)DocumentType.CallMeetingNotes || 
                                                           i.DOCUMENT_TYPE_ID == (int)DocumentType.OtherNotes || 
                                                           i.DOCUMENT_TYPE_ID == (int)DocumentType.TearSheet);
doc.canView=IoC.Resolve().Authorize(“Put”,“ManageDocuments”)==
AuthAccessLevel.Full&!(i.DOCUMENT_TYPE_ID==(int)DocumentType.FlashNotes||
i、 DOCUMENT_TYPE_ID==(int)DocumentType.CallMeetingNotes|
i、 DOCUMENT_TYPE_ID==(int)DocumentType.OtherNotes ||
i、 文档类型(ID==(int)DocumentType.TearSheet);

我认为您试图做的事情可以简化为以下内容:

var rejectedTypes = new[] { DocumentType.FlashNotes, DocumentType.CallMeetingNotes,
                            DocumentType.OtherNotes, DocumentType.TearSheet }.Cast<int>();
var accessLevel = IoC.Resolve<IClientAuthorizationService>()
                     .Authorize("Put", "ManageDocuments");
doc.canView = ((accessLevel == AuthAccessLevel.Full) &&
               !rejectedTypes.Contains(i.DOCUMENT_TYPE_ID));
var rejectedTypes=new[]{DocumentType.FlashNotes,DocumentType.CallMeetingNotes,
DocumentType.OtherNotes,DocumentType.TearSheet}.Cast();
var accessLevel=IoC.Resolve()
.授权(“出售”、“管理文件”);
doc.canView=((accessLevel==AuthAccessLevel.Full)&&
!rejectedTypes.Contains(即文档类型ID));

我认为您试图做的事情可以简化为以下内容:

var rejectedTypes = new[] { DocumentType.FlashNotes, DocumentType.CallMeetingNotes,
                            DocumentType.OtherNotes, DocumentType.TearSheet }.Cast<int>();
var accessLevel = IoC.Resolve<IClientAuthorizationService>()
                     .Authorize("Put", "ManageDocuments");
doc.canView = ((accessLevel == AuthAccessLevel.Full) &&
               !rejectedTypes.Contains(i.DOCUMENT_TYPE_ID));
var rejectedTypes=new[]{DocumentType.FlashNotes,DocumentType.CallMeetingNotes,
文档类型。