Nasıl seri sonuçları HashSet veya HashedSet dönüştürmek
Bir ISet olan bir sınıfın bir özelliği var. Mal etmeniz sorgu sonuçlarını almak için çalışıyorum, ama bunu yapmak için nasıl anlamaya olamaz.
Temel olarak, bu son kısmı için:
ISet<T> foo = new HashedSet<T>();
foo = (from x in bar.Items select x).SOMETHING;
Ayrıca bunu yapabilir:
HashSet<T> foo = new HashSet<T>();
foo = (from x in bar.Items select x).SOMETHING;
Edit: Bu işi yaparken buldum kendimi nedir:
public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source)
{
return new HashSet<T>(source);
}
public static HashedSet<T> ToHashedSet<T>(this IEnumerable<T> source)
{
return new HashedSet<T>(source.ToHashSet());
}
CEVAP
Bilmiyorumdüşünüyorumhiçbir şey bu mu inşa var... ama gerçekten kolay bir uzantı yöntemi yazma:
public static class Extensions
{
public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source)
{
return new HashSet<T>(source);
}
}
Gerçekten bir uzantısı yöntemi (ya da bazı form en azından genel bir yöntem) T
türü açıkça ifade etmek mümkün olmayabilir, çünkü: burada, ister unutmayın
var query = from i in Enumerable.Range(0, 10)
select new { i, j = i 1 };
var resultSet = query.ToHashSet();
HashSet<T>
kurucu için açık çağrı ile bunu yapamazsın. Genel yöntemler için tür kesmesi bizim için güveniyoruz.
Şimdi de senolabilirToSet
dönüş ISet<T>
ama ToHashSet
alırdım ve beton tipi adı seçin. Bu standart SERİ operatörleri (,* ToDictionary
*16) ile tutarlı ve gelecekteki genişleme (*17 örneğin*) sağlar. Ayrıca aşırı yüklenme karşılaştırma kullanmaya belirterek sağlamak isteyebilirsiniz.
Nasıl Ruby alt veya üst durumda bir di...
Nasıl SERİ en az veya en fazla özellik...
Nasıl jQuery veya Javascript ile bir ç...
Nasıl Ruby ikili dize veya tamsayı dön...
Nasıl XElement veya SERİ ile XPath kul...