Mi piacerebbe vedere se un oggetto è un builtin data type in C#Esiste una funzione per verificare se un oggetto è un tipo di dati incorporato?
Se non fosse possibile, non voglio verificarli tutti.
Cioè, io non lo fanno vuole fare questo:
Object foo = 3;
Type type_of_foo = foo.GetType();
if (type_of_foo == typeof(string))
{
...
}
else if (type_of_foo == typeof(int))
{
...
}
...
Aggiornamento
Sto cercando di creare un modo ricorsivo PropertyDescriptorCollection in cui i tipi PropertyDescriptor potrebbero non essere builtin valori. Così ho voluto fare qualcosa di simile (nota: questo non funziona ancora, ma ci sto lavorando su di esso):
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);
}
Volevo creare in modo ricorsivo un PropertyDescriptorCollection e avevo bisogno di verificare se il tipo è incorporato o meno. Volevo creare una nuova collezione se una delle proprietà non era un tipo incorporato. Aggiungerò ciò che sto cercando di fare nella domanda, forse ciò aiuterà – SwDevMan81
Ma perché questa decisione si baserà sulla specifica C#?Perché vorresti trattare Decimal in un modo, ma DateTime o Guid in un modo diverso? –
Giusto, non dovrebbe essere, quella era una svista da parte mia. Anche System.ValueType dovrebbe essere controllato. – SwDevMan81