사전 클래스 (예 : MyDictionary)를 만들었습니다. 현재 MyDictionary를 함수에 전달하고 MyDictionary의 새 인스턴스에 필터를 적용하여이 새 인스턴스를 다른 메서드로 전달하려고합니다.LINQ ToDictionary가있는 필터 사용자 지정 사전 - " 'System.Collections.Generic.Dictionary`2 형식의 개체를 캐스팅 할 수 없습니다.
유형의 개체를 캐스팅 할 수 없습니다 '은 System.Collections : 나는 람다 표현식과 ToDictionary 방법을 통해 내 사전의 필터링 된 첫 번째 인스턴스에서 두 번째 인스턴스를 만들려고하고 때
, 나는 다음과 같은 오류를 얻고있다 .Generic.Dictionary`2 [System.Int32, System.String] ''MyDictionary '를 입력하십시오.
예제를 단순화하고 LINQPad에서 다시 작성했으며 동일한 오류가 발생합니다. 나는, 나는 다음을 수행 할 수 있어요 과 괜찮아 : 사전에
Sub Main
Dim di1 As New MyDictionary
di1(1) = "One"
di1(2) = "Two"
di1(3) = "Three"
di1(4) = "Four"
Dim di2 As MyDictionary= _
CType(di1.Where(Function(w) w.Value.Contains("T")) _
.ToDictionary(Function(tdk) tdk.Key, Function(tdv) tdv.Value), MyDictionary)
End Sub
Public Class MyDictionary
Inherits Dictionary(Of Integer, String)
Public Sub New()
MyBase.New()
End Sub
Public Sub New(ByVal dictionary As IDictionary(Of Integer, String))
MyBase.New(dictionary)
End Sub
End Class
감사합니다, Brennen의 포스트 당 -Aaron
:
여기에 단순화 된 내 코드의 버전입니다 이런 식으로하지 않기를 바랬습니다.
Sub Main
Dim di1 As New MyDictionary
di1(1) = "One"
di1(2) = "Two"
di1(3) = "Three"
di1(4) = "Four"
Dim di2 = _
di1.Where(Function(w) w.Value.Contains("T")) _
.ToDictionary(Function(tdk) tdk.Key, Function(tdv) tdv.Value)
Dim di3 As New MyDictionary(di2)
End Sub
Public Class MyDictionary
Inherits Dictionary(Of Integer, String)
Public Sub New()
MyBase.New()
End Sub
Public Sub New(ByVal dictionary As IDictionary(Of Integer, String))
MyBase.New(dictionary)
End Sub
End Class
다른 사람이 세 번째 MyDictionary 인스턴스를 건너 뛸 수있는 방법에 대한 의견이 있습니까?
셋째 내 사전 예? 나는 단지 2를 본다. MyDictionary를 사용하고 사전을 반환하는 일부 작업을 수행 한 다음이 사전을 MyDictionary로 변환하면됩니다. 둘 이상의 MyDictionary 인스턴스가 없으면이 작업을 수행 할 수 없습니다. 어쩌면 당신이 성취하고자하는 것을 우리에게 말하면 누군가가 당신에게 더 유용한 제안을 줄 수 있습니다. –
사과드립니다. 나는 "세 번째 MyDictionary 인스턴스"라고 말했지만 실제로는 두 개뿐입니다. 전체적으로 세 개의 사전 인스턴스가 있습니다. 내가 뭘 하려는지 소스에서 MyDictionary 인스턴스를 전달하고 그것을 필터링하고 필터링 된 인스턴스를 반환합니다. 나는 다른 방법들을 필터링하는 다른 방법들을 가지고 있지만 그것들은 동일한 입력과 출력을 가지고있다. 이 시점에서 두 개의 MyDictionary 인스턴스가 좋기 때문에 내가 할 수있는 일이 뻔뻔스럽지 않으면이 솔루션을 계속 사용할 것입니다. – Airn5475