Benutzer mit den meisten Antworten
Unable to cast object of type

Frage
-
Hallo zusammen,
Wir lesen Kontakte aus einer XML Datei aus und wollen diese ins Outlook schreiben. Das klappt auch bei den meisten sehr gut, nur wen einige Leute synchronisieren kommt der folgende Fehler:
Unable to cast object of type 'Microsoft.Exchange.WebServices.Data.ContactGroup' to type 'Microsoft.Exchange.WebServices.Data.Contact'. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.InvalidCastException: Unable to cast object of type 'Microsoft.Exchange.WebServices.Data.ContactGroup' to type 'Microsoft.Exchange.WebServices.Data.Contact'. Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Hier der dazugehörige Code:
private void firstRead() { string departs = null; List<string> contactList = new List<string>(); serviceEST = new ExchangeService(ExchangeVersion.Exchange2010); serviceEST.Credentials = new WebCredentials(userName, userPassw0rd); serviceEST.AutodiscoverUrl(soap.getLoginUserMail(userName)); FindItemsResults<Item> findResults = null; bool syncedOe = false; try { findResults = serviceEST.FindItems(WellKnownFolderName.Contacts, new ItemView(items)); foreach (Contact item in findResults.Items) { if (item.Categories.ToString() == "Swisscom_Sync_Contacts" && !contactList.Contains(item.Department)) { contactList.Add(item.Department); departs = departs + item.Department + "; "; syncedOe = true; } } findResults = null; } catch (Exception exp) { debug.Text = debug.Text+"<br>"+exp.ToString(); } if (syncedOe == false) { departs = soap.getPersonOE(userName)+"; "; } OESearchBox.Text = departs; }
Der Fehler wird auf dieser Zeile angezeigt: foreach (Contact item in findResults.Items)
Es könnte darin liegen das es zwei verschiedene Klassen sind, doch wie kann ich dieses Problem umgehen. Das komische ist, das es nur bei einigen Leuten auftritt, bei anderen jedoch nicht.
Gruss
Wingfire
Antworten
-
Hi Wingfire,
> Es könnte darin liegen das es zwei verschiedene Klassen sind, doch wie kann ich dieses Problem umgehen?
Ersetze die while-Iteration über findResults.Items durch eine for-Schleife. Darin überprüfst Du als erstes, ob das Objekt* auch wirklich vom Laufzeittyp Microsoft.Exchange.WebServices.Data.Contact ist und ignorierst alle anderen Fälle.
P.S. Mit Objekt meine ich natürlich nicht object sondern das Objekt, das man über findResults.Items[index] anspricht ;-)
Gruß
Marcel
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 7. Juni 2011 15:03
-
Hallo W.,
man benutzt, wenn möglich, weiterhin foreach aber ersetzt den ElementTyp (hier Contact) durch einen in der passenden Vererbungsstufe. Also der Typ in den alle Elemente der Liste gecastet werden können (also hier eher Item). Danach kann je nach Unterscheidung "as Contact", oder (typeof(..), oder is) der gewünschte Ablauf definiert werden. object ginge zwar immer, aber normal, so typsicher wie möglich.
ciao Frank
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 7. Juni 2011 15:02
Alle Antworten
-
Hi Wingfire,
> Es könnte darin liegen das es zwei verschiedene Klassen sind, doch wie kann ich dieses Problem umgehen?
Ersetze die while-Iteration über findResults.Items durch eine for-Schleife. Darin überprüfst Du als erstes, ob das Objekt* auch wirklich vom Laufzeittyp Microsoft.Exchange.WebServices.Data.Contact ist und ignorierst alle anderen Fälle.
P.S. Mit Objekt meine ich natürlich nicht object sondern das Objekt, das man über findResults.Items[index] anspricht ;-)
Gruß
Marcel
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 7. Juni 2011 15:03
-
Hallo W.,
man benutzt, wenn möglich, weiterhin foreach aber ersetzt den ElementTyp (hier Contact) durch einen in der passenden Vererbungsstufe. Also der Typ in den alle Elemente der Liste gecastet werden können (also hier eher Item). Danach kann je nach Unterscheidung "as Contact", oder (typeof(..), oder is) der gewünschte Ablauf definiert werden. object ginge zwar immer, aber normal, so typsicher wie möglich.
ciao Frank
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 7. Juni 2011 15:02