Ваш стек вызовов показывает, что вызов поступает с Formatter.FormatObject
, который, в свою очередь, вызывает Formatter.IsNullData
.
Код IsNullData
:
public static bool IsNullData(object value, object dataSourceNullValue) {
return value == null ||
value == System.DBNull.Value ||
Object.Equals(value, NullData(value.GetType(), dataSourceNullValue));
}
Мы видим вызов Object.Equals
, чтобы проверить, равен ли ваш объект dataSourceNullValue
(aпользовательское значение для представления нулевых данных).Интересно, что в этом контексте dataSourceNullValue равен DBNull.Value
, поэтому проверка избыточна с приведенной выше.Но с этим ничего не поделаешь.
Если вы не хотите, чтобы Equals вызывался в этом кодовом пути, вы можете обойти, установив FormattingEnabled
в false.Это заставит CheckedListBox использовать альтернативный способ для форматирования вашего объекта:
if (!formattingEnabled) {
// Microsoft gave his blessing to this RTM breaking change
if (item == null) {
return String.Empty;
}
item = FilterItemOnProperty(item, displayMember.BindingField);
return (item != null) ? Convert.ToString(item, CultureInfo.CurrentCulture) : "";
}