2017-11-19 44 views
2

를 사용해야합니다 :암시 적 변환은 명시 적으로

public struct myStruct { 
    public static implicit operator int(Nullable<myStruct> m){ 
     /*...*/ 
    } 
} 

이 혼자 운영자 나 암시 적으로 nullable이 아닌 구조체 int로 변환하지만, 암시의 널 (NULL)로 변환하려고 할 수 있습니다

암시 int에 유형 myStruct?을 변환 할 수 없습니다 : 대응은 여전히 ​​컴파일 오류를 발생시킵니다. 명시 적 변환 (당신이 캐스트를 누락?)

이 분명히 언급 "명시 적"연산자 실제로 내가 선언 암시 적 연산자이 연산자를 제거 전부 또한 명시 적으로 하나의 언급을 제거 존재한다.

nullable structs에 관해서는 암시 적으로 선언 된 경우에도이 연산자를 명시 적으로 사용해야하는 이유는 무엇입니까?


편집 :
그래서 여기 은 "전체 코드", 컴파일러 오류가 사라하지 않는 모든 것을 제거합니다.

using System; 

public struct boilDown { 
    public static implicit operator int(Nullable<boilDown> s) { return 0; } 
} // END Struct 

public class Sandbox { 
    void Update() 
    { 
     boilDown nonNullable = new boilDown(); 
     Nullable<boilDown> NullableVersion = new Nullable<boilDown>(); 

     int MyInt; 
     MyInt = nonNullable;  // this work thanks to my operator 
     MyInt = NullableVersion; // But this line requires an explicit cast 
    } 
} 

버전 :
당신 모두가 C# 버전의 문제에서 저를 암시 구조체는 새로운 모든 내 테스트 코드, 같은 그대로 유지됩니다. Unity 2017.1.0f3에서 작업하고 있는데, .NET이 아닌 Mono 2.0.50727.1433이 사용됩니다. (분명히 NET3.5 동등한 것입니다. 그러나 실험용 NET4.6 버전에도이 문제가 있습니다.)
나는이 질문을하고 그들이 말하는 것을 보게 될 것입니다.

+0

"int?"로 시도해보십시오. – Shubham

+1

전체 코드를 제공하십시오. – apocalypse

+0

전체 코드가 바로 시작됩니다. 버그까지 끓인 후에는 테스트 코드 만 구조체 자체에 새로운 내용이 없습니다. – Estecka

답변

1

감사 나에게이 코드 해야 컴파일 말했다 모든 사람.
Unity가이 오류를 확인하여 최종적으로 버그가 발생했습니다.

1

아래와 같이 NullableVersionint으로 명시 적으로 전송할 수 있습니다.

using System; 

public struct boilDown { 
    public static implicit operator int(Nullable<boilDown> s) { return 0; } 
} // END Struct 

public class Sandbox { 
    static void Main() 
    { 

    } 
    void Update() 
    { 
     boilDown nonNullable = new boilDown(); 
     Nullable<boilDown> NullableVersion = new Nullable<boilDown>(); 

     int MyInt; 
     MyInt = nonNullable;  // this work thanks to my operator 
     MyInt = (int)NullableVersion; // works now 
    } 
} 
+0

명시 적 캐스트를 수행 할 수 있지만 암시 적 변환이 작동하지 않는 이유는 무엇입니까? – Estecka

+0

nullable 버전을 만들었 기 때문에 가능성이 높습니다 –

+1

위의 코드는 .NET 4에서 정상입니다.5+, 어떤 버전의 .NET을 실행하고 있습니까? –

관련 문제