2016-08-26 9 views
5

こんにちは、私はC#を初めて使っていて、それを学んでいます。実際に私がそれに慣れていると思うのは、私が確信していることがいくつかありますが、質問する前にそれらを研究しようとします。それは私がコレクションを見つけることができない1つのことを言った。私はVB.NETのバックグラウンドから来て、以前はデータテーブルを渡す代わりにそのプロパティを格納する別のクラスのコレクションを使用しました。私の以前のコードでは、あなたのアイデア、これまでどのような理由のためのプロパティを持つクラスを(これはC#と気にいらないで、私がやって管理しています簡単です)を取得、次のVB.NETを使用したC#のコレクション

Public class UserDetails 

Public Property Username() As String 
    Get 
     Return sUsername 
    End Get 
    Set(ByVal value As String) 
     sUsername = value 
    End Set 
End Property 

Public Property Forename() As String 
    Get 
     Return sForename 
    End Get 
    Set(ByVal value As String) 
     sForename = value 
    End Set 
End Property 

Public Property Surname() As String 
    Get 
     Return sSurname 
    End Get 
    Set(ByVal value As String) 
     sSurname = value 
    End Set 
End Property 

End Class 

のようなものでした。

public string Username { get { return sUsername; } set { sUsername = value; } } 
public string Forename { get { return sForename; } set { sForename = value; } } 
public string Surname { get { return sSurname; } set { sSurname = value; } } 

次に、別のクラスがあり、このクラスにオブジェクトを作成し、各オブジェクトをコレクションに格納します。

clUserDetails = New Collection 
Dim objUserDetails as new UserDetails 
objUserDetails.Username = "SomeonesUsername" 
objUserDetails.Forename = "SomeonesForename" 
objUserDetails.Surname = "SomeonesSurname" 
clUserDetails.Add(objUserDetails) 

とクラスも今、私は、各オブジェクトをループしてプロパティを取得するか、次の

を行うためのオブジェクトを割り当てることによって、このいずれかを取得コレクション

Public Function Items() As Collection 
    Return clUserDetails 
End Function 

を返す関数を持っています

objUsers.Items(1) 

今、コレクションオブジェクトが見つからないため、C#でリスト<を使用しようとしました。私はこれがVBのものだと仮定しているので、C#でこれを達成する方法としていくつかの助けが必要です。

私は、次の

private List <UserDetails> clUserDetails; 
UserDetails objUserDetails = new UserDetails(); 
objUserDetails.Username = "Username"; 
objUserDetails.Forename = "Forename"; 
objUserDetails.Surname = "Surname"; 
clUserDetails.Add(objUserDetails); 

を試してみましたが、私はこのリスト/コレクションの単一のオブジェクトを取得する方法へと立ち往生しています。

誰かが助けることができます

+0

IDEの[定義に移動]を右クリックすると、そのコレクションは[visualbasic](https://msdn.microsoft.com/en-us/lib)から取得されます。 rary/microsoft.visualbasic.collection(v = vs.110).aspx)名前空間は古く、使用すべきではありません。単一項目へのアクセスについては、[documentation](https://msdn.microsoft.com/en-us/library/6sh2ey19(v = vs.110).aspx?cs-save-lang = 1&cs-lang) = csharp#code-snippet-2)。最初のページにあるので、あなたはbraket [] not();を使う必要があります。 –

+0

最初の項目を取得するにはclUserDetails [0]を使用する必要があります –

+0

その文書はループスルーを示していますが、最初のものを取得する方法は示されていません。私はすでにループする方法を知っています。しかし、私はちょうど私が見つける最初のものを割り当てたいです。 objUsers.Items [1];これは私が試した最初のものだったので動作しません。 –

答えて

5

これは何ができるのですか?

あなたのモデル:

public class UserDetails 
{ 
    public string Username { get; set; } 
    public string Forename { get; set; } 
    public string Surname { get; set; } 
} 

そしてそのように、(それが存在する提供)インデックスを使用して取得し、その後>

<
var userDetails = new UserDetails 
{ 
    Username = "Username", 
    Forename = "Forename", 
    Surname = "Surname" 
}; // object initialiser 

var listOfUsers = new List<UserDetails>(); 
listOfUsers.Add(userDetails); 

リストにユーザーを追加/作成して:

listOfUsers[0].Forename 
+1

こんにちは、ありがとう、それはゼロベースだったことを認識していませんでした。それはうまくいった。 –

3

さて、あなたはその場にいます。 ListSystem.Collections.Genericが必要です。

私はあなたのクラスビットを簡素化:

class UserDetails 
{ 
    public string Username { get; set; } 
    public string Forename { get; set; } 
    public string Surname { get; set; } 
} 

はUserDetailsの新しいリストを宣言します。

List<UserDetails> clUserDetails = new List<UserDetails>(); 

あなたはこのようなあなたのリストにさらにUserDetailsを追加することができます。

clUserDetails.Add(new UserDetails { Username = "UserName1", Forename = "Forename1", Surname = "Surname1" }); 
clUserDetails.Add(new UserDetails { Username = "UserName2", Forename = "Forename2", Surname = "Surname2" }); 
clUserDetails.Add(new UserDetails { Username = "UserName3", Forename = "Forename3", Surname = "Surname3" }); 

そして、ループすることができますforeach

foreach(UserDetails userDet in clUserDetails) 
{ 
    Console.WriteLine($"Current user details --> Username : {userDet.Username} Forename : {userDet.Forename} Surname : {userDet.Surname} "); 
} 

出力は次のようになります。

現在のユーザの詳細情報 - >ユーザ名:USERNAME1 Forename:Forename1 姓:Surname1現在のユーザの詳細 - >ユーザ名:USERNAME2 Forename:Forename2姓:Surname2現在ユーザの詳細情報 - > ユーザー名:UserName3 Forename:Forename3姓:それは例外トンで、VB.NETの上にあるようにSurname3は

+0

こんにちは、ありがとう、あなたがコレクションにそれを追加すると、各プロパティを追加することができたことを認識していませんでした。しかし、これについて考えると、これはうまくいくはずです。もう一度ありがとうございます –

+0

もちろん、新しい 'UserDetails'を作成して' clUserDetails'に追加することもできます。つまり、私はほとんどインデックスに要素にアクセスしたくないと言われています。したがって、 'clUserDetails [0] .UserName'の代わりに、リストの例をループすることをお勧めします。 – uTeisT

2

だけでなく、C#で配列して、コレクションでの作業ですC#では、(と)の代わりに[と] characteresをインデクサーとして使用しています。

リスト(または他の任意のコレクション)を使用する方法の例:辞書を使用する方法に関する

// Create a list and add some items to it. 
var myList = new List<string>(); 
myList.Add("Item A"); 
myList.Add("Item B") 

// Now, use the list. 
string itemA = myList[0]; 
string itemB = myList[1]; 

例:アレイを使用する方法に関する

// Create a dictionary and add some items to it. 
var myDic = new Dictionary<string, string>(); 
myDic.Add("google.com", "Search engine"); 
myDic.Add("stackoverflow.com", "An awesome site"); 

// Now, use the dictionary (get its keys value). 
string google = myDic["google.com"]; 
string stackOverflow = myDic["stackoverflow.com"]; 

例:

// Declare an array and add some items to it. 
string[] myFirstArray = { "One", "Two", "Three" } 
// Declare a second array similar to the first one. 
string[3] mySecondArray; 
mySecondArray[0] = "One"; 
mySecondArray[1] = "Two"; 
mySecondArray[2] = "Three"; 

// Now, use values of the arrays. 
string one = myFirstArray[0]; 
string two = mySecondArray[1]; 
string three = myFirstArray[2]; 
関連する問題