유형을 런타임에만 알 수있는 곳에서는 동적으로 값을 캐스팅 할 수 있기를 원합니다. 이런 식으로 뭔가 :VB.NET에서의 캐스팅
myvalue = CType(value, "String, Integer or Boolean")
인수로 전달되는 유형의 값을 포함하고 또한 데이터베이스에서 읽기, 값이 데이터베이스에 문자열로 저장되는 문자열.
이것이 가능합니까?
유형을 런타임에만 알 수있는 곳에서는 동적으로 값을 캐스팅 할 수 있기를 원합니다. 이런 식으로 뭔가 :VB.NET에서의 캐스팅
myvalue = CType(value, "String, Integer or Boolean")
인수로 전달되는 유형의 값을 포함하고 또한 데이터베이스에서 읽기, 값이 데이터베이스에 문자열로 저장되는 문자열.
이것이 가능합니까?
물론 myvalue
은 Object
유형으로 정의해야하며 반드시 그런 것은 아닙니다. 아마도 이것은 일반적인 제네릭에 의해 제공되는 경우입니다.
어떤 유형을 사용할 지 결정하는 요소는 무엇입니까?
글쎄, 어떤 유형이 필요한지 어떻게 결정합니까? Joel이 말한 것처럼, 이것은 아마도 generics의 경우 일 것입니다. 것은 : 컴파일 타임에 타입을 알지 못하기 때문에 반환 된 값을 처리 할 수 없으므로 여기서는 캐스트가 실제로 이해가되지 않습니다.
아마도 뭔가를 동적으로 캐스팅하는 대신 (작동하지 않는 것처럼) 리플렉션을 대신 사용할 수 있습니다. 특정 메서드 나 속성을 가져오고 호출하기는 쉽습니다.
Dim t As Type = testObject.GetType()
Dim prop As PropertyInfo = t.GetProperty("propertyName")
Dim gmi As MethodInfo = prop.GetGetMethod()
gmi.Invoke(testObject, Nothing)
귀엽지는 않지만 너무 많은 대신 한 줄로 그 중 일부를 할 수 있습니다.
이렇게하는 것이 가장 짧은 방법입니다. 여러 유형으로 테스트했습니다.
Sub DoCast(ByVal something As Object)
Dim newSomething = Convert.ChangeType(something, something.GetType())
End Sub
Dim bMyValue As Boolean
Dim iMyValue As Integer
Dim sMyValue As String
Dim t As Type = myValue.GetType
Select Case t.Name
Case "String"
sMyValue = ctype(myValue, string)
Case "Boolean"
bMyValue = ctype(myValue, boolean)
Case "Integer"
iMyValue = ctype(myValue, Integer)
End Select
그것은 조금 해키하지만 작동합니다.
유형 "문자열", "정수", "부울"을 나타내는 문자열 – Youssef
문자열을 설정하는 것은 무엇입니까? –
문자열은 인수 – Youssef