25. august 2006 - 08:57Der er
11 kommentarer og 1 løsning
Typecast af object
Jeg har lavet en "Users" klasse og en "Instructor" klasse, "Instructor" nedarver fra "Users", nå har jeg så et array med 2 "Instructor"'s, men de ligger i et array af "Users".
Jeg vil så typecaste dem til instructors, men den vil ikke lade mig gøre således
System.InvalidCastException was unhandled by user code Message="Et objekt af typen 'Users[]' kan ikke konverteres til typen 'Instructor[]'." Source="App_Code.yrspqsdo" StackTrace: ved UserController.getAllInstructors() i C:\Documents and Settings\rkure\Dokumenter\Visual Studio 2005\WebSites\DGM_Training\App_Code\UserController.vb:linje 56 ved ManageCourse.initInstructorDropDownList() i C:\Documents and Settings\rkure\Dokumenter\Visual Studio 2005\WebSites\DGM_Training\ManageCourse.aspx.vb:linje 49 ved ManageCourse.Page_Load(Object sender, EventArgs e) i C:\Documents and Settings\rkure\Dokumenter\Visual Studio 2005\WebSites\DGM_Training\ManageCourse.aspx.vb:linje 18 ved System.EventHandler.Invoke(Object sender, EventArgs e) ved System.Web.UI.Control.OnLoad(EventArgs e) ved System.Web.UI.Control.LoadRecursive() ved System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Jeg fik ikke vendt tilbage til spørgmålet i fredags - eller i weekenden. Det jeg ville, var at afprøve en konstruktion i .NET 2.0, jeg ikke havde forsøgt mig med før, som "gør arbejdet" for een, og som er typestærk. Nedenstående er en lille windows-applikation, der illustrerer metoden ConvertAll:
Public Class Form1
Public Shared Function cc(ByVal u As Users) As Instructor cc = CType(u, Instructor) End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim u_arr(1) As Users u_arr(0) = New Instructor() u_arr(1) = New Instructor() Dim i_arr As Instructor() i_arr = Array.ConvertAll(u_arr, New Converter(Of Users, Instructor)(AddressOf cc)) End Sub End Class
Public Class Users Public u As Int32 End Class
Public Class Instructor Inherits Users Public i As int32 End Class
Ja, ser interessant ud, men så er det lige før at man bare selv kan løbe dem igennem i en løkke er det ik?
Jeg mener, at når man alligevel skal lave ekstra kode, og jeg gætter på at det tager ca lige lang tid, om man bruger convert all eller løber igennem en for løkke, for det gør convertall også som det ses nedenfor.
public static TOutput[] ConvertAll<TInput, TOutput>(TInput[] array, Converter<TInput, TOutput> converter) { if (array == null) { throw new ArgumentNullException("array"); } if (converter == null) { throw new ArgumentNullException("converter"); } TOutput[] localArray1 = new TOutput[array.Length]; for (int num1 = 0; num1 < array.Length; num1++) { localArray1[num1] = converter(array[num1]); } return localArray1; }
Jo, men ConvertAll er typestærk, og brokker sig hvis der er noget, der ikke passer (Og nu er det vb.net, så du har vel både "option explicit on" og "option strict on").
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.