C # 6은이를위한 새로운 기능인 extension Add 메소드를 추가합니다. 이것은 항상 VB.net에서 가능했지만 이제는 C #에서 사용할 수 있습니다.
이제 Add()
클래스에 직접 메소드 를 추가 할 필요가 없으며 확장 메소드로 구현할 수 있습니다. Add()
메서드를 사용하여 열거 가능한 형식을 확장하면 컬렉션 초기화 식에 사용할 수 있습니다. 따라서 더 이상 명시 적으로 목록에서 파생 할 필요가 없습니다 ( 다른 답변에서 언급했듯이 ) 간단히 확장 할 수 있습니다.
public static class TupleListExtensions
{
public static void Add<T1, T2>(this IList<Tuple<T1, T2>> list,
T1 item1, T2 item2)
{
list.Add(Tuple.Create(item1, item2));
}
public static void Add<T1, T2, T3>(this IList<Tuple<T1, T2, T3>> list,
T1 item1, T2 item2, T3 item3)
{
list.Add(Tuple.Create(item1, item2, item3));
}
// and so on...
}
이렇게하면 다음을 구현하는 모든 클래스 에서이 작업을 수행 할 수 있습니다 IList<>
.
var numbers = new List<Tuple<int, string>>
{
{ 1, "one" },
{ 2, "two" },
{ 3, "three" },
{ 4, "four" },
{ 5, "five" },
};
var points = new ObservableCollection<Tuple<double, double, double>>
{
{ 0, 0, 0 },
{ 1, 2, 3 },
{ -4, -2, 42 },
};
물론 튜플 모음을 확장하는 데 제한되지 않으며 특수 구문을 원하는 특정 유형의 모음에 대한 것일 수 있습니다.
public static class BigIntegerListExtensions
{
public static void Add(this IList<BigInteger> list,
params byte[] value)
{
list.Add(new BigInteger(value));
}
public static void Add(this IList<BigInteger> list,
string value)
{
list.Add(BigInteger.Parse(value));
}
}
var bigNumbers = new List<BigInteger>
{
new BigInteger(1), // constructor BigInteger(int)
2222222222L, // implicit operator BigInteger(long)
3333333333UL, // implicit operator BigInteger(ulong)
{ 4, 4, 4, 4, 4, 4, 4, 4 }, // extension Add(byte[])
"55555555555555555555555555555555555555", // extension Add(string)
};
C # 7은 언어에 내장 된 튜플에 대한 지원을 추가하지만 다른 유형일 것입니다 ( System.ValueTuple
대신). 따라서 가치 튜플에 과부하를 추가하면 사용할 수있는 옵션이 있습니다. 불행하게도, 둘 사이에 정의 된 암시 적 변환은 없습니다.
public static class ValueTupleListExtensions
{
public static void Add<T1, T2>(this IList<Tuple<T1, T2>> list,
ValueTuple<T1, T2> item) => list.Add(item.ToTuple());
}
이렇게하면 목록 초기화가 훨씬 좋아집니다.
var points = new List<Tuple<int, int, int>>
{
(0, 0, 0),
(1, 2, 3),
(-1, 12, -73),
};
그러나이 모든 문제를 겪는 대신 ValueTuple
독점적 으로 사용하도록 전환하는 것이 좋습니다 .
var points = new List<(int, int, int)>
{
(0, 0, 0),
(1, 2, 3),
(-1, 12, -73),
};