System.IO.StreamWriter
을 사용하여 파일에 쓰기위한 2 가지 정적 오버로드 된 메서드를 만들었습니다. 첫 번째 방법은 한 줄을 작성해야합니다. 그리고 두 번째 방법은 여러 줄을 써야합니다. 나는 문자열을 일반 문자열 (즉, int
, float
, bool
또는 ToString()
인 객체)과 같은 다른 기본 유형에 사용할 수 있도록 일반화하려고했습니다.문자열 []을 IEnumerable <T>에 연결하고 C#으로 오버로드 된 메서드로 문자열을 오버랩
public static void WriteLine<T>(string path, T t, bool append = false)
{
using (var file = new StreamWriter(path, append))
{
file.WriteLine(t.ToString());
}
}
public static void WriteLine<T>(string path, IEnumerable<T> ts, bool append = false)
{
using (var file = new StreamWriter(path, append))
{
foreach (var t in ts)
{
file.WriteLine(t.ToString());
}
}
}
그러나 내 방법은 문제가있는 것처럼 보입니다. 제 2 방법의 첫 번째에 WriteLine
해결에
string pathString = @"C:\temp";
const string fileName = @"test.txt";
string path = Path.Combine(pathString, fileName);
const bool append = true;
string line = "single";
WriteLine(path, line, append);
string[] lines = { "first", "second", "third" };
WriteLine(path, lines, append);
두 통화 : 예를 들어, 나는 다음과 같은 코드가 있다고 가정합니다. WriteLine
에 대한 첫 번째 호출이 문자열을 전달할 것이므로 WriteLine
에 대한 두 번째 호출은 문자열 배열을 전달하는 것이므로 두 번째 방법으로 해결 될 것이기 때문에 첫 번째 메소드가 첫 번째 메소드로 변환되기를 기대하고 있습니다. 그러나 이것은 사실이 아닙니다. 또한
, 나는 public static void WriteLine<T>(string path, IEnumerable<T> ts, bool append = false)
에 다음 WriteLine
해결에 모두 전화를 첫 번째 방법 public static void WriteLine<T>(string path, T t, bool append = false)
을 제거하고 나는 다음과 같은 출력을 얻을 경우 : 내가 WriteLine
해결하려면 다음 두 통화를 두 번째 방법 public static void WriteLine<T>(string path, IEnumerable<T> ts, bool append = false)
를 제거하는 경우, 또한
s
i
n
g
l
e
first
second
third
을
single
System.String[]
가 어떻게 내 정적,385 과부하 해결할 수 있습니다 public static void WriteLine<T>(string path, T t, bool append = false)
과 나는 다음과 같은 출력을 얻을메서드를 호출하여 string[]
을 매개 변수로 전달하면 WriteLine
메서드가 IEnumerable<T>
이고 전달되는 경우 string
매개 변수가 WriteLine
메서드를 T
으로 호출합니까?
이 시점에서 가능한지 확실하지 않습니다. 그렇지 않다면 메서드의 이름을 WriteLine(T t)
및 WriteLines(IEnumerable<T> ts)
'string'은'IEnumerable'을 구현합니다. 이 특수한 경우에는'WriteLine (string s)'의 오버로드가 필요하거나 수동으로'WriteLine (line)'으로 호출을 한정 할 수 있습니다. –
yaakov
가장 읽기 쉬운 방법은 과부하가 전혀없는 방법입니다.'WriteLine (IEnumerable)'은 한 줄을 쓰지 않기 때문에 모든 행을 씁니다. 대신 WriteLines (IEnumerable )이라고해야합니다. –
dasblinkenlight
@codran -'WriteLine (string s)'의 오버로드를 원하지 않는 이유는 명시 적으로 문자열로 캐스팅하지 않고도'int' 또는'float'와 같은 다른 원시 데이터 유형을 전달할 수 있기 때문입니다. 예를 들어,'WriteLine (123)'또는'WriteLine (1.23)'입니다. – kimbaudi