문제

vs 2005에서 2008 년까지 프로젝트를 변환 할 때 2005 년까지 몇 가지 오류가 있습니다.

Error 12 Type argument 'Object' does not inherit from or implement 
the constraint type 'System.IComparable'.

이것은 System.Object가 더 이상 인터페이스를 더 이상 구현하지 않거나 변환 중에 무언가 잘못되었다고 실제 사실입니까? 어떻게 든 이것을 고칠 수 있습니까?

문제는 다음 방법에 관한 것입니다.

Public Function ValueIn(Of T As IComparable)(ByVal pValue As T, ByVal ParamArray pArgs() As T) As Boolean
    For Each MyArg As T In pArgs
        If pValue.CompareTo(MyArg) = 0 Then
            Return True
        End If
    Next
    Return False
End Function

그리고 심지어 간단한 것도 다음과 같습니다.

Dim a as Object = 1
ValueIn(a,1,2)

위에서 언급 한 오류가 발생합니다. VS 2005에서 완벽하게 작동 했으므로 지금 문제는 무엇입니까?

도움이 되었습니까?

해결책

편집하다: 2005 년과 2008 년 모두에서 코드를 사용해 보았습니다.

당신은 가지고 있습니다 Option Strict Off 프로젝트 또는 소스 코드 파일에 구성되었습니다. 코드가 처음부터 작동하지 않았으며 설정하면 Option Strict On vs 2005에서, 당신은 오류의 실제 원인을 보게 될 것입니다. 이는 "유형 매개 변수 't'에 대해 유형 인수 추론이 실패했습니다." 나는 그것을 추천한다 Option Strict On 모든 vb.net 코드에서 사용하십시오.

매우 다른 과부하 및 유형 추론 규칙을 가진 최신 버전의 언어를 사용하고 있기 때문에 2008 년에 다른 오류가 나타납니다. VB.NET 2008에서 컴파일러는 여부에 관계없이 메소드 호출을 해결할 수 없습니다. Option Strict 켜져 있거나 꺼져 있습니다.

그만큼 System.Object 유형은 인터페이스를 구현하지 않았으며 결코 구현되지 않았습니다.

설정 Option Infer vs 2008에서 추론 된 유형을 사용하지 않기 때문에 코드와 관련이 없습니다.

두 IDE에서 오류를 수정하는 가장 간단한 방법은 호출 코드를 변경하는 것입니다.

    Dim a As Integer = 1
    ValueIn(a, 1, 2)

다른 팁

Visual Studio 2005에서 디버그 코드를 실행하면 A가

a a 객체 = 1으로 졸도합니다

정수이지만 2008 년을 사용한다면 그것이 대상이라고 말할 것입니다.

정수는 인터페이스를 비교할 수있는 방위를 가지고 있지만 객체는 아닙니다. 그래서 뭘 할건데? 답변 : 프로젝트 속성을 얻었습니다 (프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오). 그 가치를 바꾸십시오.

그리고 이제 우리는 이것이 작동 할 손가락을 건 crossed습니다.

System.Object는 비교할 수 있었습니까? 그게 어떻게 작동 했나요? ITIPATIBE를 이해할 수는 있지만 ICompayable은 의미가 없습니다.

"템플릿 메소드"에서 확장 할 수 있습니까? 어쩌면 그것은 단서 일 것입니다.

나는 이것이 템플릿 클래스를 칭찬 할 수있는 .NET 3.5의 변화로 인해 발생한다고 확신합니다. 잘 작동하지만 3.5에서 오류를 생성하는 몇 가지 이전 .NET 예제를 보았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top