Is it possible when looking at a class' properties to detect if any of them is a reference type.
Take below as an example:
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; } }
ProgrammeClient: -
Id and IsActive are properties but Client is a reference type. Is there a way of detecting this?
Many thanks, Kohan.
The reason i ask is: I am using a mapper that checks types are the same before matching property names and copying the values. My hope is to detect classes and override the type matching and simply copy the classes properties if the THEY type match.
Examples. The following example creates an instance of a type and indicates whether the type is a class. type MyDemoClass = class end try let myType = typeof<MyDemoClass> // Get and display the 'IsClass' property of the 'MyDemoClass' instance. printfn $"\nIs the specified type a class? {myType.
Properties cannot be passed by reference.
Well, it sounds like you may be trying to detect the difference between a value type and a reference type. You can find that out using Type.IsValueType
... but be aware that value types can easily have properties too. (Think about DateTime
for example.) Also, some types which you may want to regard as "not objects" are reference types - string
being a prime example.
Another option would be to use Type.IsPrimitive
- is that what you're looking for? If so, you should be aware that decimal
, DateTime
and string
are not primitive types.
If you can describe exactly what makes a type an "object" in your way of thinking (or rather, in whatever way makes a semantic difference in what you're trying to do with your type). I suspect you don't currently have a very clear set of criteria - coming up with those criteria may well clarify other aspects of your current task, too.
You can use a little reflection to see if a property is a value type or a class type. Class is probably what you mean by "object". All types in .NET derive from the object type.
Client.GetType().IsClass
Or you can loop through all properties and see which are compound
foreach(var p in ProgrammeClient.GetType().GetProperties()) { if(p.PropertyType.IsClass) Console.WriteLine("Found a class"); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With