2012-07-31 4 views
0

을 concat하기 위해 연산자를 재정의했습니다. 다음 코드를 사용하여 재정의 연산자 +을 사용하여 두 개의 byte[]을 연결했습니다.
하지만 이해할 수없는 오류가 있습니다. 이항 연산자의 매개 변수의2 바이트 배열

하나 포함하는 유형

을해야 난이 어떻게 구현해야합니다 : 여기
내 메소드의 헤더

public static byte[] operator +(byte[] bytaArray1, byte[] bytaArray2){...} 

오류 텍스트입니까?

+0

참고 :이 많이하고 있다면, 당신이해야 제안

public static byte[] AddTo(this byte[] bytaArray1, byte[] bytaArray2){...} 

답변

4

다른 클래스에 연산자를 정의 할 수 없습니다.

하나의 대안은 그래서 같은 확장 메서드을 생성하는 것입니다 :

public static byte[] concatByteArray(params byte[][] p) 
    { 
     int newLength = 0; 
     byte[] tmp; 

     foreach (byte[] item in p) 
     { 
      newLength += item.Length; 
     } 

     tmp = new byte[newLength]; 
     newLength = 0; 

     foreach (byte[] item in p) 
     { 
      Array.Copy(item, 0, tmp, newLength, item.Length); 
      newLength += item.Length; 
     } 
     return tmp; 
    } 
+0

나는 그것에 대해 채택되었습니다. 하지만 지금은 그럴 수 없다고 확신합니다. 또한 public static byte [] 연산자 + (this byte [] b1, byte [] b2) {return null; }' – Rzassar

+0

나는이 해결책을 선호했다 :''public static byte [] concatByteArray (params byte [] [] p) { int sum = 0; byte [] tmp; foreach (p의 byte [] 항목) { sum + = item.Length; } tmp = new byte [sum]; 합계 = 0; foreach (p의 byte [] 항목) { Array.Copy (item, 0, tmp, sum, item.Length); sum + item.Length; } return tmp; }'' – raiserle

0

byte이 아닌 클래스 정의 내에 연산자 오버로드를 만들려고하기 때문입니다. 내가있는 내가 + 작업도 형 프로그램으로되어 수행하고 프로그램에 대한 운영자 + 과부하 내 피연산자하고 있기 때문에

는이

class Program 
{ 
public static Program operator +(Program opleft, Program opright) 
{ 
    return new Program(); 
} 
} 

이 잘 컴파일 가정합니다.

+1

좀 더 정확하기 때문에, 연산자 오버로드가'byte []'클래스 안에 있지 않기 때문입니다. 그리고 클래스가 그 이름의 일부로 '[]'를 가질 수 없기 때문에, Rzassar가 요구하는 것은 실제로 불가능합니다. –

0

내가이 솔루션을 선호 아마도 'MemoryStream`과 같은 것을 쓸 것입니다.