Ich würde gerne sehen, ob ein Objekt ist ein builtin data type in C#Gibt es eine Funktion, um zu überprüfen, ob ein Objekt ein eingebauter Datentyp ist?
Ich möchte nicht gegen alle von ihnen, wenn möglich zu überprüfen.
Das heißt, ich nicht wollen, dies zu tun:
Object foo = 3;
Type type_of_foo = foo.GetType();
if (type_of_foo == typeof(string))
{
...
}
else if (type_of_foo == typeof(int))
{
...
}
...
aktualisieren
Ich versuche rekursiv eine PropertyDescriptorCollection zu schaffen, in dem die PropertyDescriptor Typen Werte werden möglicherweise nicht gebautet. Also wollte ich so etwas wie dies tun (Anmerkung: Dies funktioniert noch nicht, aber ich arbeite daran):
public override PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
PropertyDescriptorCollection cols = base.GetProperties(attributes);
List<PropertyDescriptor> list_of_properties_desc = CreatePDList(cols);
return new PropertyDescriptorCollection(list_of_properties_desc.ToArray());
}
private List<PropertyDescriptor> CreatePDList(PropertyDescriptorCollection dpCollection)
{
List<PropertyDescriptor> list_of_properties_desc = new List<PropertyDescriptor>();
foreach (PropertyDescriptor pd in dpCollection)
{
if (IsBulitin(pd.PropertyType))
{
list_of_properties_desc.Add(pd);
}
else
{
list_of_properties_desc.AddRange(CreatePDList(pd.GetChildProperties()));
}
}
return list_of_properties_desc;
}
// This was the orginal posted answer to my above question
private bool IsBulitin(Type inType)
{
return inType.IsPrimitive || inType == typeof(string) || inType == typeof(object);
}
Ich wollte rekursiv eine PropertyDescriptorCollection erstellen, und ich musste prüfen, ob der Typ eingebaut ist oder nicht. Ich wollte eine neue Sammlung erstellen, wenn eine der Eigenschaften kein eingebauter Typ ist. Ich füge hinzu was ich in der Frage zu tun versuche, vielleicht hilft das – SwDevMan81
Aber warum sollte diese Entscheidung auf der C# Spezifikation basieren?Warum möchten Sie Decimal auf eine Art behandeln, aber DateTime oder Guid auf andere Weise? –
Richtig, sollte es nicht sein, das war ein Versehen meinerseits. System.ValueTypes sollte auch überprüft werden. – SwDevMan81