2012-04-09 11 views
-1

Ich versuche, ein Objekt mit generischen Argumenten in C# wie (foo<mypara>)obj zu werfen, wobei mypara ein generisches Argument ist.Casting von generischen Argumenten

public class foo<T> 
{ 
    public string name {get;set;} 
    public func<T> value {get;set;} 
} 

var mypara = myfoo.GetType().GetGenericArguments(); 

wo der Wert von mypara.Name ist "int" oder "string", die eigentlich eine String-Darstellung des Typ ist.

Aber wie kann ich den echten Typ von Mypara bekommen?

+3

Hinzufügen von etwas Code zu erklären könnte nicht weh tun –

+1

Bitte fügen Sie ein einfaches Beispiel zur Demonstration Ihres Problems, tut mir leid, aber ich kann keinen Sinn dessen, was Sie fragen, wie es steht. – asawyer

+0

'obj as foo ' ist eine bessere Syntax. http://msdn.microsoft.com/en-us/library/cc488006.aspx – SouthShoreAK

Antwort

0

Ein Codebeispiel wäre hilfreich, aber ich denke, alles, was Sie brauchen, ist obj.GetType()? So erhalten Sie den Typ eines Objekts.

0

Sie können es wie folgt tun:

if (value != null) 
{ 
    if (value.GetType().IsGenericType == true 
     && value.GetType().GetGenericArguments().Length >= 0) 
    { 
     IList _valuesList = null; 

     if (value.GetType().GetGenericArguments()[0].ToString().ToLower().Contains("int")) 
     { 
      _valuesList = value as List<int>; 
     } 
     else if (value.GetType().GetGenericArguments()[0].ToString().ToLower().Contains("decimal")) 
     { 
      _valuesList = value as List<decimal>; 
     } 
     else if (value.GetType().GetGenericArguments()[0].ToString().ToLower().Contains("double")) 
     { 
      _valuesList = value as List<double>; 
     } 
     else if (value.GetType().GetGenericArguments()[0].ToString().ToLower().Contains("string")) 
     { 
      _valuesList = value as List<string>; 
     } 
    } 
} 

Ref:
Get generic instance generic type using reflection
Reflection a properties of type of generic list
Reflection and generic types

0

Verwenden Reflexion. GetType() für jedes Objekt erhält den Namen des Typs. Um diesen Objekttyp zu erstellen, sind mehr Reflexionen erforderlich.