4im*_*ble 27 c# properties class object
是否可以在查看类的属性时检测它们中的任何一个是否为引用类型.
以下面为例:
public class Client
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ProgrammeClient
{
public int Id { get; set; }
public bool IsActive { get; set; }
public IClient Client { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ProgrammeClient: -
Id和IsActive是属性,但Client是引用类型.有没有办法检测到这个?
非常感谢,Kohan.
我问的原因是:我使用的映射器在匹配属性名称和复制值之前检查类型是否相同.我希望检测类并覆盖类型匹配,如果THEY类型匹配,只需复制类属性.
Jon*_*eet 46
好吧,听起来您可能正试图检测值类型和引用类型之间的差异.您可以使用Type.IsValueType... 找到它,但请注意,值类型也很容易具有属性.(DateTime例如,考虑一下.)此外,您可能想要视为"非对象"的某些类型是引用类型 - 这string是一个主要的例子.
另一种选择是使用Type.IsPrimitive-就是那个你在找什么?如果是这样,你应该知道decimal,DateTime和string是不是基本类型.
如果你能够准确地描述出什么使一个类型成为你思考方式的"对象"(或者更确切地说,无论以何种方式使你的类型与你的类型有所不同).我怀疑你目前没有一套非常明确的标准 - 提出这些标准也可能很好地澄清你当前任务的其他方面.
Jak*_*son 19
您可以使用一点反射来查看属性是值类型还是类类型.类可能就是"对象"的意思..NET中的所有类型都源自对象类型.
Client.GetType().IsClass
Run Code Online (Sandbox Code Playgroud)
或者你可以遍历所有属性,看看哪些是复合的
foreach(var p in ProgrammeClient.GetType().GetProperties())
{
if(p.PropertyType.IsClass) Console.WriteLine("Found a class");
}
Run Code Online (Sandbox Code Playgroud)
小智 5
检查类型是否为字符串并检查是否为类。
public static bool IsNonStringClass(this Type type)
{
if (type == null || type == typeof(string))
return false;
return typeof(Type).IsClass;
}
Run Code Online (Sandbox Code Playgroud)