Io ho molti oggetti che si passano dati di tipo diverso, e senza una regola ben precisa (in alcune condizione un oggetto produce un double, in altre condizioni un double[], in altre ancora un oggetto da me definito, etc).
Scusa ma come fai a non sapere quale tipo di oggetto ti restituisce?? E poi chi te la restituisce e in base a cosa te la restituisce?
codice:
Ho stranamente notato infatti che alcune volte usando il metodo GetType() mi viene restituito il tipo corretto, altre volte mi viene restituito un generico "System.Object"
Ad esempio??
Inoltre facendo il cast da Object a tipo diverso, o viceversa, alcune volte mi restituisce un "invalid cast exception", altre volte va a buon fine.
Impossibile. La conversione da tipo Object a variabile può non andar a buon fine se la variabile Object non è compatibile con la variabile di destinazione, mentre la conversione opposta va sempre a buon fine (non puo dare errori) perchè a un Object gli puoi assegnare qualsiasi tipo di dato.
Ora detto questo coverrebbe rivedere quello che hai scritto, ma in ogni caso VB.Net mette a disposizione la conversione Trycast che ritorna Nothing in caso di conversione impossibile invece che sollevare un'eccezione.
(tradotto in C# da VB.NET)
[CODE]
Io ho molti oggetti che si passano dati di tipo diverso, e senza una regola ben precisa (in alcune condizione un oggetto produce un double, in altre condizioni un double[], in altre ancora un oggetto da me definito, etc).
Scusa ma come fai a non sapere quale tipo di oggetto ti restituisce?? E poi chi te la restituisce e in base a cosa te la restituisce?
codice:
Ho stranamente notato infatti che alcune volte usando il metodo GetType() mi viene restituito il tipo corretto, altre volte mi viene restituito un generico "System.Object"
Ad esempio??
Inoltre facendo il cast da Object a tipo diverso, o viceversa, alcune volte mi restituisce un "invalid cast exception", altre volte va a buon fine.
Impossibile. La conversione da tipo Object a variabile può non andar a buon fine se la variabile Object non è compatibile con la variabile di destinazione, mentre la conversione opposta va sempre a buon fine (non puo dare errori) perchè a un Object gli puoi assegnare qualsiasi tipo di dato.
Ora detto questo coverrebbe rivedere quello che hai scritto, ma in ogni caso VB.Net mette a disposizione la conversione Trycast che ritorna Nothing in caso di conversione impossibile invece che sollevare un'eccezione.
In VB.NET
codice:
Public Class Form1
Sub CreateClass()
Dim myPerson As New person
Dim obj As Object = myPerson
If TryCast(obj, String()) IsNot Nothing Then
Dim stringArray As String() = CType(obj, String())
ElseIf TryCast(obj, Integer()) IsNot Nothing Then
Dim numericArray As Integer() = CType(obj, Integer())
ElseIf TryCast(obj, person) IsNot Nothing Then
Dim myobject As person = CType(obj, person)
End If
End Sub
Public Class person
End Class
End Class
(tradotto in C# da VB.NET)
codice:
public class Form1
{
_ _ public void CreateClass()
_ _ {
_ _ _ _ person myPerson = new person();
_ _ _ _ object obj = myPerson;
_ _ _ _
_ _ _ _ if (obj as string[] != null) {
_ _ _ _ _ _ string[] stringArray = (string[])obj;
_ _ _ _ }
_ _ _ _ else if (obj as int[] != null) {
_ _ _ _ _ _ int[] numericArray = (int[])obj;
_ _ _ _ }
_ _ _ _ else if (obj as person != null) {
_ _ _ _ _ _ person myobject = (person)obj;
_ _ _ _ }
_ _ }
_ _ public class person
_ _ {
_ _ }
_ _ }