2017-07-11 2 views
-3

Kann mir jemand helfen zu sehen, warum mein Zustand nicht funktioniert? Um klarer zu werden, möchte ich einen T-Typ bekommen und sehen, ob dieser Typ ein String [] ist. In meinem Code passt nicht die Typen, jeder kann mir sagen, was ich falsch mache?Überprüfung des Objekttyps auf String [] funktioniert nicht

public T GetTotalMemoryValue<T>() 
{ 
    object result = null; 
    result = typeof(T); 

    if(result.GetType() == typeof(string[])) 
    { 
     Convert.ChangeType(result, typeof(string[])); 

     try 
     { 
      ... 
     } 
     return (T)(object) buffer; 

    } 
} 

Puffer ist ein String-Array.

+2

Zum einen sind Sie keinen Wert ... ist das, was Sie unter „immer zum Scheitern verurteilten“ Rückkehr? Wie kompiliert sich der Code? –

+0

Was möchten Sie erreichen? Was ist der Fehler? – Iqon

+0

Dieses Snippet kompiliert im Moment nicht, benötigen Sie Hilfe, um es zu kompilieren oder auszuführen? Bitte posten Sie ein [update your question] (https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/), damit wir Ihr Problem besser verstehen. – DaveShaw

Antwort

1

Wie ich weiß nicht, was Sie wirklich erreichen wollen, hier, warum der Vergleich fehlschlägt:

var result = typeof(T); // is the same as below 
Type result = typeof(T); 

typeof() wird wieder ein Type und Type.GetType() immer Type zurück.

Der richtige Vergleich wäre:

if(typeof(T) == typeof(string[]) 
{ 
    // code goes here 
} 
+0

Nicht ganz. typeof (string []) gibt einen System.String [] zurück, und result.GetType() gibt einen System.RuntimeType zurück. –

+0

Danke @DangerZone Ich habe mit Ihrem Beispiel behoben. Ich reparierte die 2 zurückgebenden Typen nicht. –

+0

Teilweise. '' 'GetType''' gibt einen' '' RuntimeType''' zurück, aber '' 'typeof()' '' gibt auch einen '' 'RuntimeType'' zurück, der Informationen über den Typ' '' string [] 'enthält '' (oder '' System.String [] '' ') – Iqon

Verwandte Themen