Laden...

Frage zu Strings, String-Arrays etc

Erstellt von spb vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.202 Views
S
spb Themenstarter:in
7 Beiträge seit 2009
vor 15 Jahren
Frage zu Strings, String-Arrays etc

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 ?

3.971 Beiträge seit 2006
vor 15 Jahren

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...

S
spb Themenstarter:in
7 Beiträge seit 2009
vor 15 Jahren

Hallo,

Wenn ich ....Value.GetType().ToString() in einer MesssageBox ausgeben lasse, schreibt er

System.String*

M
194 Beiträge seit 2008
vor 15 Jahren

Da ist Value nicht vom Datentyp string[]. Was string* sein soll, weiß ich auch nicht. Vielleicht hilft es ja weiter, wenn du mal die Deklaration von z aufschreibst.

"Indem Sie über dieses ernste Thema lachen disqualifizieren Sie sich selbst."
mrleeh.de

S
spb Themenstarter:in
7 Beiträge seit 2009
vor 15 Jahren

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 😕

3.971 Beiträge seit 2006
vor 15 Jahren

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...

S
248 Beiträge seit 2008
vor 15 Jahren

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

S
spb Themenstarter:in
7 Beiträge seit 2009
vor 15 Jahren

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()

S
spb Themenstarter:in
7 Beiträge seit 2009
vor 15 Jahren

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.

3.971 Beiträge seit 2006
vor 15 Jahren

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...

S
spb Themenstarter:in
7 Beiträge seit 2009
vor 15 Jahren

Nein, er bleibt leider bei

Das Objekt des Typs System.String* kann nicht in Typ System.Array[] umgewandelt werden.

😕

S
248 Beiträge seit 2008
vor 15 Jahren

Versuch mal das:

Array array = (Array)z.attr[0x4, 0x1500].Value;

Spooky

3.971 Beiträge seit 2006
vor 15 Jahren

@ 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...

S
spb Themenstarter:in
7 Beiträge seit 2009
vor 15 Jahren

DANKE ! So klappt es !