expected System.ComponentModel.INotifyPropertyChanged, got object in type-enforced expression: System.Object is not a subtype of System.ComponentModel.INotifyPropertyChanged [simple require]
V>expected System.ComponentModel.INotifyPropertyChanged, got object in type-enforced expression: System.Object is not a subtype of System.ComponentModel.INotifyPropertyChanged [simple require]
V>Что не так?
двоеточие это уточнение типа, хинт компилятору, примерно как приведение типов в таком c# коде:
var x = (object)(new List<int>());
если те нужно небезопасное приведение типов с проверкой в рантайм, то нужно использовать оператор :>
Здравствуйте, Visor2004, Вы писали:
V>Здравствуйте, Jack128, Вы писали:
J>>если те нужно небезопасное приведение типов с проверкой в рантайм, то нужно использовать оператор :>
V>Я не хочу писать обработку для InvalidCastException
V>expected System.ComponentModel.INotifyPropertyChanged, got object in type-enforced expression: System.Object is not a subtype of System.ComponentModel.INotifyPropertyChanged [simple require]
V>expected System.ComponentModel.INotifyPropertyChanged, got object in type-enforced expression: System.Object is not a subtype of System.ComponentModel.INotifyPropertyChanged [simple require]
V>Что не так?
Подозреваю что тебе тут проверять на null даже не требуется:
Здравствуйте, Ziaw, Вы писали:
Z>Здравствуйте, Visor2004, Вы писали:
V>>получить null в переменной в случае несовместимости типов
Z>К своему стыду не знаю, есть ли в Nemerle аналог оператора as.
Здравствуйте, Visor2004, Вы писали:
V>И уж точно намного больше, чем то, что насоветовали гуру выше, с иcпользованием pattern matching.
ПМ это обычный способ работы с типами выражений, и он значительно удобнее as:
1) связывает имя
2) защищает от null
3) позволяет выполнять множественную диспетчеризацию
match (dataContext)
{
| propertyChanged is INotifyPropertyChanged =>
propertyChanged.PropertyChanged += ( s, e ) => when ( e.PropertyName == property ) PropertyChanged ( s, e.PropertyName );
| _ => ()
}
1. В контексте не создается мусорная переменная (к тому же не гарантировано инициализированная)
2. Условие выполнения кода читается как propertyChanged is INotifyPropertyChanged, а не как безликое propertyChanged != null
3. Если тебе придется дополнить код действиями с другим, возможно реализуемым интерфейсом, сделать это будет гораздо проще
Теперь расскажи, чем тебе нравится больше вариант с приведением и проверкой на нулл, я не могу найти ни одной причины.
Здравствуйте, Ziaw, Вы писали:
Z>Здравствуйте, Visor2004, Вы писали:
V>>мне не нравится то, что он раздувает код
Z>а ты сравнивал? они абсолютно одинаковы по длине.
Самому, когда был молодым не нравилось что нету as-a а сейчас понял что матч в разы круче и скучаю в шарпе за матчем. Матч написать гораздо проще!! так как авто дополнение и все такое, а так надо кастонуть, потом с нулом сравнить.