는 특히, 나는 이것을 쓰고 싶은 :일반 익명 메소드를 작성하려면 어떻게해야합니까?
public Func<IList<T>, T> SelectElement = list => list.First();
하지만 T
에서 구문 오류가 발생합니다. 일반적인 익명 메소드를 사용할 수 없습니까?
는 특히, 나는 이것을 쓰고 싶은 :일반 익명 메소드를 작성하려면 어떻게해야합니까?
public Func<IList<T>, T> SelectElement = list => list.First();
하지만 T
에서 구문 오류가 발생합니다. 일반적인 익명 메소드를 사용할 수 없습니까?
아니요, 죄송합니다. C#에서 지원하는 기능이 아닌 일반 필드 또는 일반 속성이 필요합니다. 당신이 할 수있는 최선 T 소개하는 일반적인 방법을 만들 수 있습니다 :
public Func<IList<T>, T> SelectionMethod<T>() { return list => list.First(); }
을 그리고 지금은 말할 수있다 :
Func<IList<int>, int> selectInts = SelectionMethod<int>();
하지만 T
알아야합니다
public Func<IList<T>, T> SelectionMethod<T>()
{
return list => list.First();
}
: 당신이 일반적인 포함하는 클래스를 만들고 싶어하지 않는 경우가 일반적인 방법을 사용할 수있는 대안으로
class Foo<T>
{
public Func<IList<T>, T> SelectionMethod = list => list.First();
}
하지만 여전히 컴파일 시간에 누군가가 T
을 알아야합니다.
리턴 유형 만 일반으로 선언했습니다.
이 시도 :
public Func<IList<T>, T> SelectionMethod<T>() { return list => list.First(); }
당신이 일반적인 수의 유형 매개 변수를 포함해야 선언하는 일이의 이름입니다. 컴파일러는 제네릭 클래스 및 제네릭 메서드 만 지원합니다.
그래서, 일반적인 클래스는 방법
를 들어,class MyGeneric<T> {
// You can use T here now
public T MyField;
}
이 있거나 있어야
public T MyGenericMethod<T>(/* Parameters */) { return T; }
이 처음 메소드 이름에 선언 된 경우에만 당신은 반환 매개 변수로 T를 사용할 수 있습니다
.
반환 형식이 실제 메서드보다 먼저 선언 된 것처럼 보이지만 컴파일러는 그런 식으로 읽지 않습니다.
public static void SomeContainerFunction()
{
const string NULL_VALUE = (string)null;
Type GetValueType<T>(T value) => value?.GetType() ?? typeof(T);
var typeOfNullValue = GetValueType(NULL_VALUE);
Debug.WriteLine($"Value: {NULL_VALUE}, Type: {typeOfNullValue}");
}
안녕하세요. 질문에 대답 할 때 코드와 관련된 설명을 제공하십시오. 어떤 사람들은 자신의 코드를 이해하지 못하거나 질문에 어떻게 대답 하는지를 보지 못합니다. [좋은 답변 작성 방법] (https://stackoverflow.com/help/how-to-answer)을 참조하십시오. – Nuageux
를 해결! http://stackoverflow.com/questions/4338867 – mpen