Jak napisać prostą metodę, która sprawdza, czy konkretny typ jest niestandardową strukturą (utworzoną przy użyciu public struct { };
), czy nie.Jak ustalić, czy typ .NET jest niestandardową strukturą?
Sprawdzanie Type.IsValueType
nie wystarczy, ponieważ prawdą jest również, aby int
, long
, itp, i dodanie czek !IsPrimitiveType
nie wyklucza decimal
, DateTime
a może jakieś inne typy wartości. Wiem, że większość z wbudowanych typów wartości są rzeczywiście „elemencie”, ale chcę tylko, aby sprawdzić „niestandardowych elemencie”
Te pytania są w większości takie same, ale bez odpowiedzi muszę:
EDIT: z odpowiedzi wspomniał "sprawdzić przedrostka 'system'" był najbardziej stabilny (choć wciąż jest hackerem). W końcu zdecydowałem się na stworzenie Atrybutu, który musisz udekorować strukturą, aby struktura podniosła go jako niestandardową strukturę. (Drugi wybór myślałem było utworzyć pusty interfejs i niech struct realizacji tego pustego interfejsu, ale sposób atrybut wydawał się bardziej elegancki)
Oto mój oryginalny kontroler niestandardowego struct jeśli ktoś jeżeli zainteresowany:
type.IsValueType && !type.IsPrimitive && !type.Namespace.StartsWith("System") && !type.IsEnum
Po prostu z ciekawości, dlaczego chcesz to wykryć? – Joren
Fluent NHibernate + Auto Mapping: ustaw wszystkie niestandardowe konstrukcje, które będą traktowane jako komponenty (obiekty wartości); ustawienie dowolnego innego typu elementu na komponent (np. DateTime lub dziesiętny) spowoduje awarię całego frameworka (przynajmniej w mono) – SztupY
Add on! type.IsEnum –