Aracılığıyla paylaş


Yerel değişkenler örtülü olarak yazılı (c Programlama Kılavuzu #)

Yerel değişkenler bir inferred "tür" verilebilir var açık bir türü yerine.var Anahtar sözcüğü sağ tarafındaki ifade başlatma deyimi değişkeninden türünü gerçekleştirip derleyici bildirir.İnferred türü olabilir yerleşik türün, anonim bir tür, bir kullanıcı tanımlı türü veya bir türü olarak tanımlı.net Framework sınıf kitaplığı.Dizileri ile başlatma hakkında daha fazla bilgi için var, bkz: Örtülü olarak türlenmiş dizi (c Programlama Kılavuzu #).

Aşağıdaki örnekler, yerel değişkenler bildirilebilir ile çeşitli şekillerde var:

// i is compiled as an int
var i = 5;

// s is compiled as a string
var s = "Hello";

// a is compiled as int[]
var a = new[] { 0, 1, 2 };

// expr is compiled as IEnumerable<Customer>
// or perhaps IQueryable<Customer>
var expr =
    from c in customers
    where c.City == "London"
    select c;

// anon is compiled as an anonymous type
var anon = new { Name = "Terry", Age = 34 };

// list is compiled as List<int>                             
var list = new List<int>();

Olduğunu unutmamalısınız var anahtar sözcüğünü "değişken" gelmez ve değişken gevşekçe olduğunu göstermez yazılı ya da Geç Baðlanmýþ.Yalnızca derleyicinin belirler ve en uygun türü atar anlamına gelir.

var Anahtar sözcüğünü aşağıdaki bağlamlarda kullanılabilir:

  • Yerel değişkenler (yöntemi kapsamında bildirilen değişkenler), önceki örnekte gösterildiği gibi.

  • İçinde bir için başlatma ifade.

    for(var x = 1; x < 10; x++)
    
  • İçinde bir foreach başlatma ifade.

    foreach(var item in list){...}
    
  • İçinde bir kullanarak ifadesi.

    using (var file = new StreamReader("C:\\myfile.txt")) {...}
    

Daha fazla bilgi için bkz. Nasıl yapılır: kullan daha örtük olarak yerel değişkenler ve Diziler bir sorgu ifadesinde (C# Programlama Kılavuzu) yazılı.

var ve anonim türleri

Çoğunda kullanımını durumlarda var isteğe bağlıdır ve yalnızca bir sözdizimi kolaylığıdır.Ancak, bir değişkeni bir anonim tür ile başlatıldığında değişken olarak bildirmeniz gerekir var ilerleyen bir noktasında nesnesinin özelliklerini erişmeniz gerekiyorsa.Bu yaygın bir senaryodur, LINQ sorgu ifadeleri.Daha fazla bilgi için bkz. Anonim türleri (C# Programlama Kılavuzu).

Kaynak kodunuzu açısından bakıldığında, anonim bir tür adı yok.Bu nedenle, sorgu değişkeni ile başlatılmış, var, döndürülen sıra nesneleri özelliklerine erişmek için tek yolu kullanmak için ise var yineleme değişkeni türü olarak foreach ifadesi.

class ImplicitlyTypedLocals2
{
    static void Main()
    {
        string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };

        // If a query produces a sequence of anonymous types, 
        // then use var in the foreach statement to access the properties.
        var upperLowerWords =
             from w in words
             select new { Upper = w.ToUpper(), Lower = w.ToLower() };

        // Execute the query
        foreach (var ul in upperLowerWords)
        {
            Console.WriteLine("Uppercase: {0}, Lowercase: {1}", ul.Upper, ul.Lower);
        }
    }
}
/* Outputs:
    Uppercase: APPLE, Lowercase: apple
    Uppercase: BLUEBERRY, Lowercase: blueberry
    Uppercase: CHERRY, Lowercase: cherry        
 */

Notlar

Örtülü olarak yazılan değişken bildirimleri için aşağıdaki kısıtlamalar geçerlidir:

  • varyerel bir değişken olarak bildirilen ve aynı deyiminde başlatıldı, yalnızca kullanılabilir; değişkeni null veya yöntem grubu veya adsız işlevi için başlatılamıyor.

  • varsınıf kapsamı alanlarda kullanılamaz.

  • Kullanılarak bildirilen değişkenler var başlatma ifade kullanılamaz.Başka bir deyişle, bu ifade yasal: int i = (i = 20); ama bu ifade bir derleme zamanı hatası oluşturur:var i = (i = 20);

  • Aynı deyimi içinde birden fazla örtük olarak yazılan değişkenleri başlatılamıyor.

  • Bir tür adlı, var kapsamında, sonra var anahtar sözcüğünü bu tür adı çözülür ve dolaylı olarak yazılan bir yerel deðiþken bildirimini bir parçası olarak değerlendirilmez.

Size gelebilir var , tam olarak oluşturulmuş sorgu değişken türünü belirlemek zor sorgu ifadelerle yararlı olabilir.Gruplandırma ve sıralama işlemleri ile ortaya çıkabilir.

var Anahtar sözcüğünü de faydalı olabilir değişken türünü klavyede yazmak sıkıcı veya belirgin veya kodun okunabilirliğini eklemez.Örneğin burada var bu konuda yardımcı olur şekilde iş grubu operasyonlarla Kullanılanlar gibi iç içe genel türler ile.Aşağıdaki sorgu sorgu değişkenine türüdür. IEnumerable<IGrouping<string, Student>>.Bunu anlamak ve kodunuzu korumak gerekir başkalarının sürece, kısaltma ve kolaylık sağlanması için örtülü yazarak kullanma konusunda hiçbir sorun yoktur.

// Same as previous example except we use the entire last name as a key.
// Query variable is an IEnumerable<IGrouping<string, Student>>
 var studentQuery3 =
     from student in students
     group student by student.Last;

Ancak, kullanımını var az kodunuzu diğer geliştiriciler için anlamak daha zor hale getirmek için potansiyeline sahiptir.Bu nedenle, genellikle C# belgeleri kullanan var yalnızca olduğunda bu gereklidir.

Ayrıca bkz.

Görevler

Nasıl yapılır: kullan daha örtük olarak yerel değişkenler ve Diziler bir sorgu ifadesinde (C# Programlama Kılavuzu) yazılı

Başvuru

Örtülü olarak türlenmiş dizi (c Programlama Kılavuzu #)

Anonim türleri (C# Programlama Kılavuzu)

Nesne ve koleksiyon Başlatıcı (C# Programlama Kılavuzu)

var (C# Reference)

(C# Başvurusu için)

foreach, başvurusu (C#)

using ifadesi (C# Reference)

Kavramlar

LINQ sorgu ifadelerini (C# Programlama Kılavuzu)

Diğer Kaynaklar

C# Başvurusu

LINQ (dil ile bütünleşik sorgu)