Ik krijg via een WCF laag in mijn Silverlight App. een aantal Enums door. In de basis (VB.net) worden deze Enums gemaakt alsvolgt:
Waarbij PropertyComboBoxSource een kleine wrapper class is die bestaat uit een int en string.
Nu dacht ik, ik controleer in de methode gewoon of de PropertyItem value een "[Default]" is en cast dan op de zelfde ( (int)pp) ) manier naar int. Maar het is voor zover ik weet niet mogelijk om een PropertyItem (uit de GetComboBoxSource) direct te casten naar int.
Het prependen van PropertyItem met een @ geeft een InvalidCast omdat ik niet mag casten naar een string, terwijl ProperyItem.ToString() een cast naar string impliceert.
Zonder het Generic gedeelte, dus
Visual Basic .NET:
Enums waarbij een [Default] instaat gaan in onderstaande methode volledig onderuit. Er volgt een InvalidCastException en dan houdt het uiteraard gewoon op.1
2
3
4
5
6
| Enum PasswordPolicy None Simple [Default] Strong End Enum |
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
| public List<PropertyComboBoxSource> GetComboBoxSource<T>() { List<PropertyComboBoxSource> PropertySource = new List<PropertyComboBoxSource>(); T[] ComboBoxItems = Utility.EnumGetValues<T>(); //Silverlight ! Enum.GetValues(); foreach (T PropertyItem in ComboBoxItems) { PropertyComboBoxSource ComboBoxItem = new PropertyComboBoxSource(); ComboBoxItem.Key = (int)Enum.Parse(typeof(T), PropertyItem.ToString(), true); ComboBoxItem.Value = PropertyItem.ToString(); PropertySource.Add(ComboBoxItem); } return PropertySource; } |
Waarbij PropertyComboBoxSource een kleine wrapper class is die bestaat uit een int en string.
Nu dacht ik, ik controleer in de methode gewoon of de PropertyItem value een "[Default]" is en cast dan op de zelfde ( (int)pp) ) manier naar int. Maar het is voor zover ik weet niet mogelijk om een PropertyItem (uit de GetComboBoxSource) direct te casten naar int.
Het prependen van PropertyItem met een @ geeft een InvalidCast omdat ik niet mag casten naar een string, terwijl ProperyItem.ToString() een cast naar string impliceert.
Zonder het Generic gedeelte, dus
C#:
gaat het perfect.
1
2
3
4
5
6
7
8
| PasswordPolicy[] ppPol = Utility.EnumGetValues<PasswordPolicy>(); foreach (PasswordPolicy pp in ppPol) { PropertyComboBoxSource propsource = new PropertyComboBoxSource(); propsource.Key = (int)pp; propsource.Value = pp.ToString(); cbxSource.Add(propsource); } |
[ Voor 4% gewijzigd door TeeDee op 06-03-2009 09:10 . Reden: topic afmaken voordat ik naar huis ga :D ]
Heart..pumps blood.Has nothing to do with emotion! Bored