'int'유형으로 제한된 제네릭 메소드가있는 경우 확실하게 일반 T 유형으로 정수를 캐스팅 할 수 있어야합니다. 예를 들면 ...
public T ExampleMethod<T>(int unchanged) where T : int
{
return (T)unchanged;
}
... 컴파일러가 불평합니다.'int'유형을 'T'로 변환 할 수 없습니다.하지만 대상이 정수임을 나타내는 제약이 있습니다. 그럼 분명히 효과가 있을까요?
최신 정보:
실제 시나리오는 enum 값을 반환하는 도우미 메서드가 필요하다는 것입니다. 그래서 제 이상적인 도우미 방법이 더 좋아질 것입니다 ....
public T GetAttributeAsEnum<T>(XmlReader reader, string name) where T : enum
{
string s = reader.GetAttribute(name);
int i = int.Parse(s);
return (T)i;
}
... 이것을 이렇게 사용하면 ...
StateEnum x = GetAttributeAsEnum<StateEnum>(xmlReader, "State");
CategoryEnum y = GetAttributeAsEnum<CategoryEnum>(xmlReader, "Category");
OtherEnum z = GetAttributeAsEnum<OtherEnum>(xmlReader, "Other");
...하지만 당신은 enum으로 제한 할 수 없습니다.
"제약 조건으로 클래스 또는 인터페이스 만 지정할 수 있습니다."(c) ReSharper
int (Int32)는 단지 구조체입니다. 당신은 T가구조체. 하지만 구조체를 제약 조건으로 사용할 수는 없습니다.
여기서 찾을 수있는 가능한 제약 조건의 전체 목록 -http://msdn.microsoft.com/en-us/library/d5x73970.aspx
UPD
Enum 제약 조건은이 질문을 참조하십시오.& quot; 특수 클래스 & quot;의 제네릭 형식 제약 조건에 대한 해결 방법이 있습니까? 열거 형 C # 3.0?
public class Generic<T> where T : struct { }
. 그런 다음 클래스를 다음과 같이 인스턴스화 할 수 있습니다.Generic<int> gen = new Generic<int>();
. - Eric J.
int(및 다른 모든 숫자 유형 및 열거 형)은 제네릭 제약 조건으로 사용할 수 없습니다.
만나다
자세한 내용 및 옵션을 확인하십시오.
제네릭과 타입 제약에 관한 C #을 만든 Anders Hejlsberg와의 토론
http://www.artima.com/intv/generics.html
하나의 유형 제약 조건을 넣을 수 있습니다.구조체이렇게 :
public class Generic<T> where T : struct { }
Generic<int> gen = new Generic<int>();
그 컴파일은 확실합니까?
여기에서 다음과 같은 오류가 발생합니다.
오류 CS0701 : 'int'는 (는) 유효한 제약이 아닙니다. 유형으로 사용되는 제약 조건은 인터페이스, 비 밀폐 클래스 또는 유형이어야합니다. 매개 변수.
T
? - gilly3T
제네릭을 사용하는 이유는 항상 int입니다. - default locale