2016-09-25 18 views
1

ここでは、C#を約1か月間学習しています。(C#)リスト内のオブジェクトへのアクセス/変更

とにかく、私は今、数日間のStackOverflowを検索してきたし、私の問題への具体的な答えを見つけることができませんでした...

//Here's my Class 

public class Guy 
{ 
    public static int ID { get; set; } 
    public static int LifeExpectancy { get; set; } 
    public static bool Living { get; set; } 

    public Guy(int id, int lifeExpectancy, bool living) 
    { 
     ID = id; 
     LifeExpectancy = lifeExpectancy; 
     Living = living; 
    } 
} 

私は何をしようとしているが作成されますこのメソッドを使用して、パブリックリストにそれらを置くために「someGuy」オブジェクトの特定の数...重要性の順に

public static List<Guy> Guys = new List<Guy>(); 

public static void makeSomeGuys(int howManyGuys) 
{ 
    for (int i = 0, i <= howManyGuys; i++) 
    { 
     int id = i; 
     int lifeExpectancy = 80; 
     bool alive = true; 

     Guys.Add(New Guy(id, lifeExpectancy, alive)); 

     Console.WriteLine("Made a new Guy {0}", id);   
    } 
    return; 
} 

質問:

特定のオブジェクトとそのパラメータにアクセスするにはどうすればよいですか?(リスト「みんな」からアクセスします。)

私は別のクラスでは、このリストからオブジェクトにアクセスするにはどうすればよいですか?(私は絶対にする必要はありませいることを、私は好奇心が強い)

私はそのパラメータを使用して、リスト内のオブジェクトを検索することができますか?(何かなどをやってとは対照的に... humanPopulation[number]

私はそれらのパラメータが変更があったオブジェクトのための新しいリストを作成する必要がありますか?(元のリストにそれを残すとは対照的に)

は、リストから項目を削除することが可能ですか?(ただ、一般的に、もしそうなら、なぜ?事の人々が行うということです)

私は実際には最初の質問には答えが必要です。残りは単なるボーナスです。ありがとう!

+2

あなたは 'のAPIドキュメントを読んでいますリスト '?ここにリンクがあります:https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx – wulfgarpro

答えて

0
using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace test 
{ 
    public class Guy 
    { 
     private int m_ID; 
     private int m_LifeExpectancy; 
     private bool m_Living; 

     public int ID 
     { 
      get { return m_ID; } 
      set { m_ID = value; } 
     } 
     public int LifeExpectancy 
     { 
      get { return m_LifeExpectancy; } 
      set { m_LifeExpectancy = value; } 
     } 
     public bool Living 
     { 
      get { return m_Living; } 
      set { m_Living = value; } 
     } 

     public Guy(int id, int lifeExpectancy, bool living) 
     { 
      ID = id; 
      LifeExpectancy = lifeExpectancy; 
      Living = living; 
     } 
    } 

    public class MyFactory 
    { 
     public IList<Guy> MakeSomeGuys(int howManyGuys) 
     { 

      IList<Guy> localGuys = new List<Guy>(); 

      for (int i = 0; i <= howManyGuys; i++) 
      { 

       int id = i; 
       int lifeExpectancy = 80; 
       bool alive = true; 

       localGuys.Add(new Guy(id, lifeExpectancy, alive)); 

       Console.WriteLine("Made a new Guy {0}", id); 
      } 


      return localGuys; 
     } 
    } 

    public class program 
    { 
     public void Main() 
     { 
      MyFactory mf = new MyFactory(); 
      IList<Guy> guys = mf.MakeSomeGuys(5); 

      //How do I access a specific object as well as its parameters? (Accessing from the list "Guys".) 
      int GetFirstGuyId = guys.FirstOrDefault().ID; //LEARN LINQ 

      //How do I access an object from this list in another class? (Not that I absolutely need to, I'm curious) 
      //you need to learn about object oriented encapsulation for better understanding. 

      //Can I search for an object in a list by using its parameters? (As opposed to doing something like...humanPopulation[number]) 
      Guy guyById = guys.Where(g => g.ID == 5).FirstOrDefault(); // returns the first match (need to learn lambda expression) 

      //Should I create a new list for objects that have had their parameters modified? (As opposed to leaving it in the original list) 
      // you need to learn about passing values by value/reference (by reference you already changing the original!). 

      //Is it possible to remove items from a list? (Just in general, is that a thing people do? if so, why?) 
      //yes 
      guys.Remove(guyById); 

     } 
    } 
} 
+0

最初の質問は次のとおりです。int firstGuyLifeExpectancy = guys [0] .LifeExpectancy; –

+0

あなたが書いたコードの最上部を理解できません。不適切なカプセル化を訂正したときの部分です。あなたがそれをやっているのと違うの?それとも、それは正当なのですか? – Grover

+0

このようにして、入力/出力のget/setを制御することができます。たとえば、値が大きく、0の場合にのみ設定します。 –

0

あなたはC#とOOプログラミングの新しい可能性が高いので、この回答には良いリンクがいくつか含まれています。唯一の問題1について

はまず、あなたのGuyクラスのプロパティを適切にカプセル化されていません。 thisの記事のように、ID,LifeExpectancyLivingのプロパティを正しくスコープしてください。

あなたはそれは、特定のIDを持つGuyで、特定項目にアクセスしたい場合は、Dictionaryのような連想コンテナを使用したほうが良いと思います。

Listコンテナに満足している場合は、リンクの例に示すようにGuysFindメソッドを使用する必要があります。ドキュメント内にという述語という用語があることに気づくでしょう。thisのリンクが詳しく述べられます。

3

あなたはガイクラスのプロパティから静的修飾子、すなわち削除する必要があります:まず、静的ではなくのインスタンスよりも、プロパティは、クラス自体の属性であることを引き起こすため

public int ID { get; set; } 
public int LifeExpectancy { get; set; } 
public bool Living { get; set; } 

をクラス(個々の人たち)。第五男の平均寿命にアクセスするには

Console.WriteLine(Guys[0].LifeExpectancy); 

:最初の男(ゼロ番目)の平均余命にアクセスするには

Console.WriteLine(Guys[4].LifeExpectancy); 
関連する問題