또는 "내가 잘못 했나요?"컴파일러에서 왜 이런 복잡한 구문을 필요로합니까?
필자는 필요한 경우 문자열을 반환하는 작은 함수를 작성하고 있습니다 (따옴표 붙이기 가능). 그렇지 않으면 그대로 반환합니다. 문자가 함수에 입력됩니다. 결과는 문자열입니다. 내가 처음에해야 할 노력은 무엇
했다 :
private string QuotedChar(char ch) {
if(ch < (char)128 && !char.IsWhiteSpace(ch))
return(new string(ch));
// ...
}
그러나, 컴파일러는 CS0214, "포인터 고정 크기 버퍼는 안전하지 않은 상황에서 사용될 수있다"라고, 돌려 문을 컴파일 할 때. 대신 코드를 변경하면 :
private string QuotedChar(char ch) {
if(ch < (char)128 && !char.IsWhiteSpace(ch))
return(new string(new char[] { ch }));
// ...
}
... 잘 작동합니다. 그러나 그것은 다소 무의미한 것처럼 보입니다. 포인터 나 고정 된 크기의 버퍼를 사용하려고하는 이유를 이해하지 못합니다. 단지 char 일뿐입니다. 내가 바보 같은 것을 놓친 건가요? 아니면이게 문제입니까/벌레입니까?
참고로,이 문서는 Microsoft .NET Framework가 아닌 Mono 2.0입니다. Windows를 실행하지 않기 때문에 Microsoft C# 컴파일러가 없어도 동일한 작업을 수행하는지 알 수 없으므로 버그인지 궁금합니다.
A-ha. 그거야. 재미있는; Mono는 MSDN에서 찾지 못했지만 char을 사용하는 생성자를 보여주었습니다. 나는 당신이 MonoDevelop의 완료 테이블에 'char *'를 표시하지 않기 때문에 포인터가 맞을 것으로 생각합니다. 감사! –
나는 그것이 가능한 과부하를 잘못 보여주는 MonoDevelop 버그라고 생각합니다. –
그런 식으로 보일 것입니다. Subversion에서 트리를 빌드하자마자 바로 버그 리포트를 제출할 것입니다. –