是否可以指定test是List<>而不指定List<int>的条件类型
namespace ConsoleApplication9
{
class Program
{
static void Main(string[] args)
{
SuperClass1 class1 = new SuperClass1();
PrintAllFields(class1);
}
public static void PrintAllFields(object obj)
{
var SuperClassType = obj.GetType();
foreach (var item in SuperClassType.GetFields())
{
if (item.FieldType == typeof(List<>))
{
Console.WriteLine("it's List");
}
else if (item.FieldType == typeof(Int32))
{
Console.WriteLine("it's int32");
}
else if (item.FieldType == typeof(Byte))
{
Console.WriteLine("it's byte");
}
}
}
}
public class SuperClass1
{
public int param1;
public int param2;
public int param3;
public byte param4;
public List<int> test;
public SuperClass1()
{
test = new List<int>();
}
}
}更新:我使用了相关答案中的函数,现在代码看起来像。而且它不正确。我希望在控制台得到消息Console.WriteLine("it's List");,但似乎我做错了什么。如何解决这个问题?因为我认为这个问题和相关问题是不同的。
namespace ConsoleApplication9
{
class Program
{
static void Main(string[] args)
{
SuperClass1 class1 = new SuperClass1();
PrintAllFields(class1);
}
public static void PrintAllFields(object obj)
{
var SuperClassType = obj.GetType();
foreach (var item in SuperClassType.GetFields())
{
if (IsInstanceOfGenericType(typeof(List<>), item))
{
Console.WriteLine("it's List");
}
else if (item.FieldType == typeof(Int32))
{
Console.WriteLine("it's int32");
}
else if (item.FieldType == typeof(Byte))
{
Console.WriteLine("it's byte");
}
}
}
public static bool IsInstanceOfGenericType(Type genericType, object instance)
{
Type type = instance.GetType();
while (type != null)
{
if (type.IsGenericType &&
type.GetGenericTypeDefinition() == genericType)
{
return true;
}
type = type.BaseType;
}
return false;
}
}
public class SuperClass1
{
public List<int> test = new List<int>();
public SuperClass1()
{
test = new List<int>();
}
}
}发布于 2017-08-03 15:05:06
我使用这个作为扩展方法。
public static bool IsList(this Type type)
{
return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>);
}用法:
if (item.FieldType.IsList())
{
Console.WriteLine("it's List");
}若要回答更新的问题,请调用此函数
public static bool IsInstanceOfGenericType(System.Type genericType, object instance)使用FieldInfo的实例。您在代码中此时没有List<int>的实例。我觉得你最好把密码改成..。
if (IsOfGenericType(typeof(List<>), item.FieldType))
{
... etc
...
public static bool IsOfGenericType(System.Type genericType, System.Type type)
...https://stackoverflow.com/questions/45487884
复制相似问题