2017-08-11 13 views
9

C# 7'de bir değişken hedef değişken kullanarak adlandırılmış bir tuple seçmenin daha iyi bir yolu var mı? Örnek 1'de yanlış bir şey yapmalıyım ya da bir şeyi tamamen yanlış anlamalıyım. Bunu yapmak için hedef türünü açıkça belirlemeliyim.Seçili deyimlerde adlandırılmış geçişler kullanma

//1. Fails to compile with "incorrect number of type parameters" issue. 
var tuples = source.Select<(int A, int B)>(x => (x.A, x.B)); 

//2. Compiles 
IEnumerable<(int A, int B)> tuples = toCheck.Select(x => (x.A, x.B)); 

//3. Compiles 
var tuples = new HashSet<(int A, int B)>(source.Select(x => (x.A, x.B))); 

cevap

11

isterseniz iki parametreyi yazmak zorunda, ancak tanımlama grubu elemanları aslında adlandırılır emin olmak gerekir. C# 7.0

, açıkça yapmanız gerekir:

değişmez bir demet içinde değer bir özellik veya tarladan elde edilir C# 7.1 olarak
var tuples = source.Select(x => (A: x.A, B: x.B)); 
foreach (var tuple in tuples) 
{ 
    Console.WriteLine($"{tuple.A}/{tuple.B}"); 
} 

, bu tanımlayıcı örtük eleman adı olacaktır,

var tuples = source.Select(x => (x.A, x.B)); 
foreach (var tuple in tuples) 
{ 
    Console.WriteLine($"{tuple.A}/{tuple.B}"); 
} 

, sana elemanları isimlerini yerleştirebilir

+0

Büyük fark etmedi vb uyumluluğu etrafında daha fazla ayrıntı için feature document bakınız: böylece yazma mümkün olacak Deklarasyonun içindeki tupleda böyle. – gmn

+0

Merak etme, neden anonim tiplerde olduğu gibi '' A = x.A'' değil? '' var x = yeni {A = x.A, B = x.B}; ' –

+0

@RandRandom: Bu, tuple öğesi adlarının sözdizimi değil. Her iki deklarasyonda ve tuple literallerinde sürekli olarak::. Anonim tipler daha çok nesne başlatıcıları, "ayar" özellikleri (türler aslında değişmez olsalar da) gibidir. –

-1

Select 2 tipi parametreleri alır: Select<TSource, TResult>. Bir tuple (int A, int B) sadece bir türüdür, ayrıca ValueTuple<int, int> da yazabilirsiniz. Yani sadece var kullanabilirsiniz adlandırılmış tanımlama grubu

var tuples = source.Select<TypeOfSource, (int A, int B)>(x => (x.A, x.B)); 
İlgili konular