문제를 재검토 한 후 알립니다. @Dogu Arslan이 WriteData 메서드를 사용한 정확한 예제를위한 최상의 솔루션을 제안했지만 질문 제목의 문제는 실제로 @InBetween과 @Fabio에 의해 해결되었습니다. I. e. WriteData 메서드의 정확한 예를 보려면 WriteData 메서드에서 변환 논리를 이동하는 것이 더 좋지만 관련이없는 형식의 논리를 추상화하려면 제안 된 오버로드를 사용하는 것이 좋습니다. 그래서 세 가지 대답이 모두 도움이됩니다.관련없는 유형에서 연산을 추상화하는 방법은 무엇입니까?
나는 이미 다음과 유사한 질문 - 1, 2 및 기타를 읽었지만 내 경우에는 적절한 해결책이 제공되지 않았습니다.
제 경우 : 다음과 같은 간단한 방법이 있습니다. 중요한 부분은 주석과 "소스"매개 변수가있는 행입니다. 나머지 부분은 그다지 중요하지 않으며 질문 제목의 "조작"이 있음을 보여주는 역할 만합니다.
void WriteData(
int count,
int currentIndex,
List<byte> source,
StreamWriter sw,
string fileName)
{
var countToWrite = count - currentIndex;
if (countToWrite == 0)
return;
if (sw == null)
sw = new StreamWriter(GetFullPath(fileName));
//---------- Source's elements must be converted to string.
var dataToWrite =
source.GetRange(currentIndex, countToWrite)
.Select(x => Convert.ToString(x));
StringBuilder sb = new StringBuilder();
foreach (var item in dataToWrite)
sb.AppendLine(item);
sw.Write(sb.ToString());
}
지금은 "원본"매개 변수를 바이트, 복식 또는 문자열 목록으로 지정하고 싶습니다. "source"에있는 목록의 유형 중 하나만 변경 한 WriteData 메서드를 3 부 작성 했습니까? 아니면 더 나은 방법이 있습니까?
유형 제한을 시도했지만 제한 할 유형은 무엇입니까?
내 형식 목록 (byte, double, string)에 없으면 형식을 검사하고 예외를 throw하려고했습니다. 그러나 예외는 런타임에만 작동하며 컴파일 타임에 작동하도록하고 싶습니다.
당분간은 일시적인 해결책으로 런타임 유형 검사와 함께 스스로를 제한해야하지만 앞에서 언급했듯이 관점에서는 적합하지 않습니다.
일반화 할 수 있으며 프로그래밍 방식으로 유형이 지정되었는지/ –