爲什麼C#允許將對象隱式轉換爲用於等式比較的int,但不允許將對象類型轉換爲對象類型比較,即使存在隱式運算符?爲什麼進行相等性檢查,不允許隱式轉換對象類型,但對於int?
bool errorHere = valueOnly == valuePair;
一行在底部給出例外。
class Program
{
static void Main(string[] args)
{
ValueOnly valueOnly = new ValueOnly();
ValuePair valuePair = new ValuePair();
bool areEqual = valueOnly.Value == valuePair;
bool errorHere = valueOnly == valuePair;
bool butNotHere = valueOnly == (ValueOnly)valuePair;
valueOnly = valuePair; // Or Here
}
}
public class ValuePair
{
public int Value { get; set; }
public string Text { get; set; }
public static implicit operator ValueOnly(ValuePair valuePair) {
if (valuePair.Text != null || valuePair.Value != 0) {
return new ValueOnly() { Value = valuePair.Value };
}
return null;
}
public static implicit operator int(ValuePair valuePair) {
return valuePair.Value;
}
}
public class ValueOnly
{
public int Value { get; set; }
}
以下是錯誤:
Error Operator '==' cannot be applied to operands of type 'ValueOnly' and 'ValuePair'
也許我是說錯了,但如果是這樣,爲什麼這個工作? 「bool areEqual = valueOnly.Value == valuePair;」 valueOnly上的Value屬性是一個int,並且valuePair被隱式轉換爲一個int ... – Daryl
您引用的行正在使用定義的隱式運算符執行顯式轉換。我想真正的問題是,爲什麼我必須明確定義轉換? – Daryl
@Daryl:在再次閱讀您的問題後修改。你必須明確地定義從'ValuePair'到'ValueOnly'的轉換,因爲這兩種類型是不相關的。 – Jon