通过泛型参数铸造
问题描述:
我想在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的真正类型?
答
一个代码示例会有帮助,但我认为你需要的全部是obj.GetType()
?这就是你如何得到一个对象的类型。
答
你可以这样说:
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>;
}
}
}
编号:
Get generic instance generic type using reflection
Reflection a properties of type of generic list
Reflection and generic types
答
使用反射。任何对象上的GetType()都将获得该类型的名称。更多的思考是必要的,以使其成为该对象类型。
添加一些代码来解释不会伤害 – 2012-04-09 13:24:27
请添加一个简单的例子来说明你的问题,我很抱歉,但我无法理解你的问题。 – asawyer 2012-04-09 13:25:24
'obj as foo'是一个更好的语法。 http://msdn.microsoft.com/en-us/library/cc488006.aspx –
SouthShoreAK
2012-04-09 13:28:50