簡體   English   中英

平等和分配操作員

[英]Equality and Assignment Operators

我有一個用VB.NET編譯的程序集,它包含兩個運算符:

Public Shared Operator =(quarterA As CalendarQuarter, quarterB As CalendarQuarter) As Boolean
    Return quarterA.StartDate = quarterB.StartDate AndAlso
        quarterA.EndDate = quarterB.EndDate AndAlso
        quarterA.Quarter = quarterB.Quarter
End Operator

Public Shared Operator <>(quarterA As CalendarQuarter, quarterB As CalendarQuarter) As Boolean
    Return Not (quarterA = quarterB)
End Operator

但是,當在C#中使用程序集執行相等性檢查時, if (qtr != null)我收到錯誤:

Cannot implicitly convert type 'object' to 'bool'

用於C#MVC4,Razor:

@{Html.BeginForm();}
    <div class="ui-form ui-form-horizontal form-width-narrow">
        <div class="title">
            Choose a Quarter</div>
        <div class="group">
            <label><strong>Control</strong></label>
            <div class="field">
                @Html.DropDownListFor(x => x.Quarter, new SelectList(Model.AvailableQuarters))
                <input value="Select" class="ui-button" type="submit" />
            </div>
        </div>
        @if (Model.Quarter != null) {
            // Error in the above statement 
        }           
    </div>
@{Html.EndForm();}

我需要做什么才能使相等運算符正常運行?

當我按原樣實現你的代碼並將實例比較為null時,我在你的相等運算符中得到一個NullReferenceException 但是,如果我添加一個空檢查它工作正常:

Public Shared Operator =(quarterA As CalendarQuarter, quarterB As CalendarQuarter) As Boolean

    If quarterA Is Nothing OrElse quarterB Is Nothing Then Return False

    Return quarterA.StartDate = quarterB.StartDate AndAlso
        quarterA.EndDate = quarterB.EndDate AndAlso
        quarterA.Quarter = quarterB.Quarter
End Operator

我懷疑還有其他因素導致你得到的錯誤。

最有可能你正在使用賦值運算符( = )時,你應該使用等號( == ):

if (qtr = null)   // wrong  - assigning null to qtr
if (qtr == null)  // correct

另外,我建議重寫EqualsGetHashCode以與您的相等運算符保持一致。

您不能在VB或C#中重載賦值運算符。

http://msdn.microsoft.com/en-us/library/8edha89s.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM