C #에서 유형을 매개 변수로 전달
가설 적으로이 작업을 수행하는 것이 편리합니다.
foo.GetColumnValues(dm.mainColumn, int)
foo.GetColumnValues(dm.mainColumn, string)
여기서 GetColumns 메소드는 전달 된 유형에 따라 내부에서 다른 메소드를 호출합니다.
예, 부울 플래그 또는 이와 유사한 것으로 할 수 있습니다. 이걸 전달할 수있는 방법이 있는지 궁금한 다음 질문하십시오.
typeof (arg [1]) 또는 유사 ...
또한 메소드를 재정의하고 제네릭을 사용할 수 있습니다 .-이 작업을 수행하는 다른 방법이 있다는 것을 알고 있습니다.
두 가지 일반적인 접근 방식이 있습니다. 먼저 통과 할 수 있습니다System.Type
object GetColumnValue(string columnName, Type type)
{
// Here, you can check specific types, as needed:
if (type == typeof(int)) { // ...
이것은 다음과 같이 호출됩니다. int val = (int)GetColumnValue(columnName, typeof(int));
다른 옵션은 제네릭을 사용하는 것입니다.
T GetColumnValue<T>(string columnName)
{
// If you need the type, you can use typeof(T)...
이것은 권투를 피하고 유형 안전을 제공한다는 이점이 있으며 다음과 같이 호출됩니다. int val = GetColumnValue<int>(columnName);
foo.GetColumnValues(dm.mainColumn, typeof(string))
또는 일반적인 방법을 사용할 수 있습니다.
public void GetColumnValues<T>(object mainColumn)
{
GetColumnValues(mainColumn, typeof(T));
}
그런 다음 다음과 같이 사용할 수 있습니다.
foo.GetColumnValues<string>(dm.mainColumn);
형식을 인수로 전달할 수 있지만 그렇게하려면 다음을 사용해야합니다 typeof
.
foo.GetColumnValues(dm.mainColumn, typeof(int))
메소드는 유형의 매개 변수를 승인해야합니다 Type
.
여기서 GetColumns 메소드는 전달 된 유형에 따라 내부에서 다른 메소드를 호출합니다.
이 동작을 원하면 유형을 인수로 전달하지 말고 대신 유형 매개 변수를 사용하십시오.
foo.GetColumnValues<int>(dm.mainColumn)
foo.GetColumnValues(dm.mainColumn, typeof(int));
foo.GetColumnValues(dm.mainColumn, typeof(string));
또는 제네릭 사용 :
foo.GetColumnValues<int>(dm.mainColumn);
foo.GetColumnValues<string>(dm.mainColumn);
당신은 이것을 할 수 있습니다. typeof()
foo.GetColumnValues(typeof(int))
public void GetColumnValues(Type type)
{
//logic
}
Type-iow, pass typeof (int) 형식의 인수를 사용할 수 있습니다. (아마도 더 효율적인) 접근법에 제네릭을 사용할 수도 있습니다.
제네릭 형식을 사용하십시오!
class DataExtraction<T>
{
DateRangeReport dateRange;
List<Predicate> predicates;
List<string> cids;
public DataExtraction( DateRangeReport dateRange,
List<Predicate> predicates,
List<string> cids)
{
this.dateRange = dateRange;
this.predicates = predicates;
this.cids = cids;
}
}
그리고 이것을 다음과 같이 부르십시오 :
DataExtraction<AdPerformanceRow> extractor = new DataExtraction<AdPerformanceRow>(dates, predicates , cids);
참고 URL : https://stackoverflow.com/questions/10955579/passing-just-a-type-as-a-parameter-in-c-sharp
'program tip' 카테고리의 다른 글
노드 bin 스크립트를 실행할 때 명령 행 작업 디렉토리 결정 (0) | 2020.08.05 |
---|---|
NSURL을 로컬 파일 경로로 변환 (0) | 2020.08.05 |
기능이 여러 조건 인 Numpy (0) | 2020.08.05 |
넷빈즈 : @author를 변경하는 방법 (0) | 2020.08.05 |
ASP.NET 2.0-app_offline.htm 사용 방법 (0) | 2020.08.05 |