Hallo,
ich habe folgenden Programmausschnitt:
string[] pC = new string[2];
Bei der folgenden Programmzeile
pC = (string[])z.att[0x4, 0x1].Value;
bekomme ich den Fehler:
Das Objekt des Typs System.String* kann nicht in Typ System.String[] umgewandelt werden.
Bei z handelt es sich um ein spezielles Objekt, aber ich hatte eigentlich gehofft dass dies keine Rolle spielt. Wenn ich im Debugger "Value" anklicke sehe ich dass dort wohl ein String Array mit den 2 Strings als Elementen hinterlegt ist die ich sehen will, nur wie kann ich diese beiden Elemente in "normale" Strings umwandeln um sie z.B. mit einer MessageBox ausgeben zu können ?
Was ist z.att[0x4, 0x1].Value für ein Datentyp?
PS: Den Datentyp bekommst du mittels z.att[0x4, 0x1].Value.GetType() heraus. Eventuell noch eine null-Prüfung einbauen
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Hallo,
Wenn ich ....Value.GetType().ToString() in einer MesssageBox ausgeben lasse, schreibt er
System.String*
Hallo,
z kommt von einer ActiveX Komponente..somit kann ich leider nicht dessen Defintion pasten...
Im Debugger sehe ich beim Anklicken von Value genau die Werte auf die ich zugreifen will...deshalb hatte ich gehofft das ginge relativ einfach 😕
Halt an der entsprechende Stelle mal und gebe im DirektFenster ?z.att[0x4, 0x1].Value.GetType() ein und poste mal bitte das komplette Ergebnis hier.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Das Array beginnt nicht mit dem Index 0. Daher kannst du es nicht nach string[] casten.
Um auf das Array zugreifen zu können caste es in die Klasse "Array" und benutze die dort angebotenen Methoden.
Hier ein Beispiel:
// Hier kommt dein Objekt rein
Array array = Array.CreateInstance(typeof(string), new int[] { 10 }, new int[] { 1 });
for (int i = array.GetLowerBound(0), j = array.GetUpperBound(0); i < j; i++)
{
// Mache etwas mit dem Wert
array.GetValue(i);
}
Spooky
Hallo,
das ergibt:
?z.Attributes[0x4, 0x1500].Value.GetType()
{Name = "String*" FullName = "System.String
*"}
[System.RuntimeType]: {Name = "String
*" FullName = "System.String
*"}
base {System.Reflection.MemberInfo}: {Name = "String
*" FullName = "System.String
*"}
Assembly: {mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
AssemblyQualifiedName: "System.String
*, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
Attributes: Public | Sealed | Serializable
BaseType: {Name = "Array" FullName = "System.Array"}
ContainsGenericParameters: false
DeclaringMethod: "z.Attributes[0x4, 0x1500].Value.GetType().DeclaringMethod" hat eine Ausnahme vom Typ "System.InvalidOperationException" verursacht.
DeclaringType: null
FullName: "System.String
*"
GenericParameterAttributes: "z.Attributes[0x4, 0x1500].Value.GetType().GenericParameterAttributes" hat eine Ausnahme vom Typ "System.InvalidOperationException" verursacht.
GenericParameterPosition: "z.Attributes[0x4, 0x1500].Value.GetType().GenericParameterPosition" hat eine Ausnahme vom Typ "System.InvalidOperationException" verursacht.
GUID: {00000000-0000-0000-0000-000000000000}
HasElementType: true
IsAbstract: false
IsAnsiClass: true
IsArray: true
IsAutoClass: false
IsAutoLayout: true
IsByRef: false
IsClass: true
IsCOMObject: false
IsContextful: false
IsEnum: false
IsExplicitLayout: false
IsGenericParameter: false
IsGenericType: false
IsGenericTypeDefinition: false
IsImport: false
IsInterface: false
IsLayoutSequential: false
IsMarshalByRef: false
IsNested: false
IsNestedAssembly: false
IsNestedFamANDAssem: false
IsNestedFamily: false
IsNestedFamORAssem: false
IsNestedPrivate: false
IsNestedPublic: false
IsNotPublic: false
IsPointer: false
IsPrimitive: false
IsPublic: true
IsSealed: true
IsSerializable: true
IsSpecialName: false
IsUnicodeClass: false
IsValueType: false
IsVisible: true
MemberType: TypeInfo
Module: {CommonLanguageRuntimeLibrary}
Namespace: "System"
ReflectedType: null
StructLayoutAttribute: null
TypeHandle: {System.RuntimeTypeHandle}
TypeInitializer: null
UnderlyingSystemType: {Name = "String
*" FullName = "System.String
*"}
?z.Attributes[0x4, 0x1500].Value.GetType()
Hallo,
habe nun folgendes versucht:
Array array = Array.CreateInstance(typeof(string), new int[] { 10 }, new int[] { 1 });
array = (Array[])z.attr[0x4, 0x1500].Value;
Aber auch das gibt wieder den Fehler
Das Objekt des Typs System.String kann nicht in Typ System.Array[] umgewandelt werden.
Eventuell hilft dir Array.Copy weiter.
Array::Copy-Methode (Array, Array, Int32)
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Nein, er bleibt leider bei
Das Objekt des Typs System.String* kann nicht in Typ System.Array[] umgewandelt werden.
😕
Versuch mal das:
Array array = (Array)z.attr[0x4, 0x1500].Value;
Spooky
@ spb,
ein System.Array ist bereits ein Array. Die eckigen Klammern musst du weglassen.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...