내장 유형을 사용하는 것이 사용자 생성 유형과 다른 점은 확실하지 않습니다. 더 큰 문제는 매개 변수없는 생성자가없는 유형의 인스턴스를 만드는 것입니다.
무엇을 하든지 객체 배열에 캐스팅해야만 MethodInfo.Invoke
에 전달할 수 있으므로 어느 시점에 Activator.CreateInstance
을 수행해야합니다.
사용자가 필드에 항목을 입력 한 다음 단추를 눌러 메서드를 호출 할 수있는 경우 리플렉션을 사용하여 형식의 TryParse/Parse 정적 메서드를 찾고 해당 메서드를 호출하는 것이 가장 좋습니다 입력을 검증/구문 분석하기 위해. 여기
문자열로 변환 할 수 있습니다 대부분의 시스템 유형에 대해 암시 적으로 작동하는 코드 조각입니다 : 확실히
var parseMethod = typeof(int).GetMethods().FirstOrDefault(
m => m.IsStatic &&
m.Name == "TryParse" &&
m.GetParameters().Length == 2 &&
m.GetParameters()[0].ParameterType == typeof(string) &&
m.GetParameters()[1].IsOut);
if(parseMethod != null) {
bool result = (bool)parseMethod.Invoke(null, new object[]{"45", null});
//result == true
result = (bool)parseMethod.Invoke(null, new object[] { "blah", null });
//result = false
}
C#에서는 문자열이 분명히 복잡한 유형입니다. 그것들은 stuct 대신 클래스로 정의되어 차이점 만 표시하지만 문자열의 동작은 개념적으로 기본이 아닙니다. C#의 사용법은 기본 유형과 비슷하지만, 대부분 영리한 연산자 오버로딩과 몇 가지 특수 언어 기능 (예 : 문자열 리터럴의 C# 처리)을 통해 수행됩니다. –
@Stephen - 동의하지 않습니다. struct vs class는 여기서 중요하지 않습니다. 타입과 마찬가지로 커스텀 구조체를 작성할 수 있습니다. 그리고 string의 "special"은 연산자와 같은 언어적인 것들을 훨씬 뛰어 넘습니다. –
"complex"에 대한 정의에 따라 의미가있을 수도 있고 C#에서는 공식적으로 "complex type"이라는 용어를 사용하지 않는다고 생각합니다. 그것은 "custom"과 "value type"과 같은 용어를 가지고 있으며, sting도 마찬가지입니다. 문자열의 데이터가 문자열이 아닌 항목의 배열로 저장되므로 개념적으로 복잡하다고 생각합니다 ... 따라서 문자열의 데이터 사용은 기본 값 유형의 간단한 가져 오기보다 복잡한 동작에 따라 달라집니다. 기억. 하지만 복잡한 정의는 다를 수 있습니다. –