2012-04-09 5 views
-1

Я пытаюсь использовать объект с использованием общих аргументов в C#, например (foo<mypara>)obj, где mypara является общим аргументом.Кастинг по общим аргументам

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

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

где значение mypara.Name является "int" или "string", которая на самом деле текстовое представление типа.

Но как я могу получить настоящий тип mypara?

+3

добавление кода для объяснения не может повредить –

+1

Пожалуйста, добавьте простой пример, демонстрирующий вашу проблему, извините, но я не могу понять, что вы просите, поскольку оно стоит. – asawyer

+0

'obj as foo ' - лучший синтаксис. http://msdn.microsoft.com/en-us/library/cc488006.aspx – SouthShoreAK

ответ

0

Пример кода был бы полезен, однако я думаю, что все, что вам нужно, это obj.GetType()? Так вы получаете тип объекта.

0

Вы можете сделать это следующим образом:

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

Используйте отражение. GetType() на любом объекте получит имя типа. Для создания этого типа объекта необходимы дополнительные отражения.

Смежные вопросы