2013-02-14 2 views
-1

없이 "||"를 사용하여 C# 없이 기본/핵심 형식을 얻는 방법을 찾고 있습니다. 기본적으로 10 진수, 날짜 시간, 문자열을 포함 시키길 원합니다.하지만 구체적으로 찾으려는 것은 아닙니다.반사 기본 형식을 얻으십시오

개체의 근본적인 형식을 확인하고 개체에서 상속되는지 확인하는 데 어떤 것을 본 것을 기억합니다.

누군가 올바른 방향으로 나를 어떻게 안내 할 수 있습니까?

또한이 방법은 원시 nullable을 어떻게 분류할까요?

+5

"기본적인 유형"이란 무엇입니까? .NET에서 "프리미티브"로 간주되는 유형 집합은 유한합니다. 그냥'HashSet '을 설정하고 포함 여부를 확인 하시겠습니까? 'IsFundamental' 속성은 없습니다. – dtb

+0

"원시 nullable"은 일반 Nullable 구조체의 인스턴스입니다. 여기서 T는 기본 유형입니다. (또는 기본 유형에 해당하는 복싱 유형, 확실하지 않음) – millimoose

+0

이유를 설명해 주시겠습니까? – svick

답변

2

기본 데이터 유형 목록 (시작하기에 기본이 아니며 다른 구조체와 약간 다르게 동작 함)을 얻으려면 IsPrimitive을 사용해야합니다. 나는 ||을 사용하고 싶지 않다는 것을 이해할 수 있었지만, IsPrimitive은 나에게 많은 의미가 있습니다.

또한 DateTime에는 기본/기본으로 고려해야 할 충분한 이유가 없습니다. DateTime은 일반적인 구조체입니다. 여기

내가 가지고 올 수있는 최고의 방법입니다 :

List<Type> types = typeof(string).Assembly.GetTypes() 
        .Where(t => t.IsPrimitive).ToList(); 
types.Add(typeof(string)); 
types.Add(typeof(decimal)); 

어떤 종류의 mscorlib에 (typeof(string).Assembly를) 검색 만 프리미티브를 선택 (System.DateTime이 목록에없는,하지만 당신은 추가 할 수있는 것이다 원하는 경우). 이 기본 유형으로 간주 될 수 있기 때문에 stringdecimal 유형이 포함됩니다.

+0

'string'은 특별합니다. 다른 클래스처럼 작동하지 않습니다. 예를 들어, 문자열 상수를 가질 수 있습니다.이 배열은 매우 작은 (배열 및 문자열) 가변 크기 유형 중 하나입니다. – CodesInChaos

+0

그래서 IntPtr을 고려해보십시오. IntPtr은 .NET에서 특별한 방법으로 처리되지만 C#에서는 처리되지 않습니다. 그리고 당신은 또한 C#에 의해서 특별한 방법으로 다루어지는'decimal '을 고려하지만 .Net은 아닙니다. 즉, "기본"유형의 집합은 "C#의 키워드가있는 유형"과 ".NET의 기본 유형"을 결합한 것입니다. – svick

+0

@svick 이것이 내가 처음 질문에 대답하기가 어려웠던 이유입니다. C# _or_ .NET의 기본 데이터 형식에 대해서는 좋은 정의가 없습니다. 그러므로 항상 주관적인 요소가있을 것입니다. – antonijn