2012-03-20 20 views
6

Sayfam yükümde, ReturnStuff()'u bir veya üç kez mi arıyorum? Üç kere çağırıyorsam, bunu yapmanın daha verimli bir yolu var mı?Listeleri doğru kullanıyorum mu?

protected void Page_Load(object sender, EventArgs e) 
{ 
    string thing1 = ReturnStuff(username,password)[0]; 
    string thing2 = ReturnStuff(username, password)[1]; 
    string thing3 = ReturnStuff(username, password)[2]; 
} 

public static List<string> ReturnStuff(string foo, string bar) 
{ 

    // Create a list to contain the attributes 
    List<string> Stuff = new List<string>(); 

    // Some process that determines strings values based on supplied parameters 

    Stuff.Add(fn); 
    Stuff.Add(ln); 
    Stuff.Add(em); 

    return Stuff; 
} 
+1

Eğer yöntemini üç kez arayarak veya değiliz olmadığını soruyorsun? –

+1

Evet, bunu ve nasıl daha verimli bir şekilde yapılacağını. – mmcglynn

cevap

13

Üç kere çağırıyorsunuz. Bir ilk ad, soyadı ve e-posta varsa

protected void Page_Load(object sender, EventArgs e) 
{ 
    var stuff = ReturnStuff(username,password); 
    string thing1 = stuff[0]; 
    string thing2 = stuff[1]; 
    string thing3 = stuff[2]; 
} 

Ama daha da ötesi, ilk adınızı oluştururken bir nesne döndüren bir işlev yazardı, soyadı: Burada daha verimli bir yoldur ve e-posta adresi:

public class User 
{ 
    public string LastName {get;set;} 
    public string FirstName {get;set;} 
    public string EMail {get;set;} 
} 

public static User GetUser(string username, string password) 
{ 
    // Some process that determines strings values based on supplied parameters 

    return new User() {FirstName=fn, LastName=ln, EMail=em}; 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    var user = GetUser(username,password); 
} 
+0

Dang it, sniped ... – squillman

+0

Vay, n00b kafamın etrafına sarılacak çok şey var, bu yüzden teşekkür ederim! – mmcglynn

+0

@mmcglynn: İlk önce listeye geri dönme hakkında kısaca konsantre olabilirsiniz, o zaman :) – BoltClock

1

3 kere çağırıyorsunuz. Bir kez arayın ve sonuçları bir değişkene kaydedin, daha sonra bu değişkenle çalışabilirsiniz.

bu deneyin:

var stuff = ReturnStuff(username,password); 
string thing1 = stuff[0]; 
string thing2 = stuff[1]; 
string thing3 = stuff[2]; 
+0

Neden varyant kullanıyorsunuz? burada herhangi bir anlamlılık var mı? Neden güçlü türler değil? – Pankaj

+2

@Pankaj Garg: Erm, "varyant"? – BoltClock

+0

Kodumdaki sinyal gürültü oranını azaltmak için var kullanıyorum. Her zaman uygun değildir ve her zaman iyi bir fikir değildir. Bunu oku. http://stackoverflow.com/questions/41479/use-of-var-keyword-in-c-sharp – squillman

1

3 kez. Aşağıdaki kod farkına varmanıza yardımcı olacaktır. Ana fonksiyona gidin ve oradan func() öğesini çağırın.

class howmanytimescallingafunction 
    { 
     public static int i = 0; 
     public List<string> fun() 
     { 
      List<string> list = new List<string> { "A", "B", "C" }; 
      i++; 
      return list; 
     } 
     public void func() 
     { 
      Console.WriteLine(fun()[0]); 
      Console.WriteLine(i); 
      Console.WriteLine(fun()[1]); 
      Console.WriteLine(i); 
      Console.WriteLine(fun()[2]); 
      Console.WriteLine(i); 
     } 
    } 

yerel bir List <> değişkeninde döndürülen değeri elde kez bu işlevi çağırmak ve sonra değişkenini kullanarak erişebilir olmalıdır. Böyle:

List<string> list = function-that-returns-List<string>(); 
list[0]; //Do whatever with list now.