: 당신은
public class Person
{
public string Name {get; set;}
public decimal Salary {get; set;}
}
하고 함수가 될 것이다 사람 클래스를 생성하고 이름과 급여를 읽을 필요 D는 내가 제네릭을 사용, 다양한 유형의 정보를 반환합니다 :
public static T GetInfo<T>(string name);
// This can be called as following:
string name = GetInfo<string>("name");
int salary = GetInfo<int>("salary");
하지만 한 가지 문제,있다 : 우리의 방법은 모든 유형을 반환 할 수 동안, string
을 반환 Console.ReadLine
가. 문자열을 '대상'유형으로 어떻게 변환 할 수 있습니까? T
을 확인하고 지원하려는 모든 유형에 대해 사용자 정의 논리를 작성할 수는 있지만, 번거롭고 번거 롭습니다. 이제
public static T GetInfo<T>(string name, Func<string, T> convert);
// This can be called as following:
string name = GetInfo<string>("name", s => s);
int salary = GetInfo<int>("salary", int.Parse);
어떻게 당신이 그 방법을 구현합니까 : 더 나은 솔루션은 호출자가 어떻게 특정 유형에 문자열을 변환하는 알고 약간의 기능에 전달할 수 있도록하는 것입니다?
public static T GetInfo<T>(string name, Func<string, T> convert)
{
Console.WriteLine("Please enter " + name);
string input = Console.ReadLine();
return convert(input);
}
몇 가지 참고 사항 :
- 유형 매개 변수는 종종 단지
T
명명 된,하지만 난 그게 도움이 그들에게 같은 TInfo
등 더 자세한 설명 이름을 제공하기 위해 찾을 수 있습니다.
- 컴파일러에 형식을 추론 할 수있는 충분한 정보가 있으므로
<string>
및 <int>
부분을 두 번째 예제에서 생략 할 수 있습니다.
- 예제를 짧고 단순하게 유지하기 위해 오류 처리를 남겨 두었습니다.프로덕션 코드에서는 잘못된 입력을 처리하기위한 전략을 생각해 내야합니다.
그래서 문자열이나 int 중 하나를 반환하는 방법을 원하십니까? –
C# 7 + 튜플 사용 : https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/#user-content-tuples. –
이것은 XY 문제를 비명을 지른다. (그것이 의미하는 것이 무엇인지 모른다면, 구글 그것, 나는 모바일에 편리한 링크가 없다). 이걸로 무엇을 이루려고합니까? –