2016-12-07 1 views
-1

クラスのプロパティで特定のインスタンスを参照できるようにLstクラスを作成するにはどうすればよいですか? Listで可能でない場合、Lst []配列で可能ですか?このパターンのリストの作成/使用/参照は名前を持っていますか?c#プロパティの値をインデックスとして使用してリストからクラスインスタンスを参照する

私が手にエラーが2リットルのArgument 1: cannot convert from 'string' to 'int' [「..リスト」] Console.WriteLineを(内部で)

namespace ConsoleApplication1 { 

    public class Lst { 
     public string Name; 
     public Lst(string Name) { this.Name = Name; } 
     public Lst this[string Name] { get { return this[Name]; } } 
    } 

    class Program { 
     static void Main(string[] args) { 
      List<Lst> l = new List<Lst>(); 
      l.Add(new Lst("1stList")); 
      Console.WriteLine("List {0}:", l["1stList"].Name); 
      Console.WriteLine("List {0}:", l["2ndList"].Name); 
      Console.ReadKey(); 
     } 
    } 
} 
+0

誤りがありますあなたの 'Lst'クラスではありません。 'List 'の場合、 'int'の位置でインデックスを付けます。 – krillgar

+0

あなたの 'Lst'は何のものでもありません。それはコレクションでもありません。それは単一のプロパティ( 'Name')を持つクラスです。インデクサーは無意味です(実際には自己参照型であり、スタックを爆破します)。あなたが実際に呼び出すインデクサーは 'List 'に属しています。 – itsme86

+1

'List 'の代わりに 'Dictionary 'を使ってみてください。ただし、オーバーヘッドは小さいです(キー値は2倍になります)。 – Sinatr

答えて

0

賞賛:たとえば、特定の名前を持つアイテムを取得します。

msdn.microsoft.com/en-us/library/6x16t2tx.aspx

式ボディ定義

単にの 結果をすぐに返すインデクサーを持っているのが一般的です表現。 =>使用して、これらの インデクサーを定義するための構文のショートカットがあります:C#

public Customer this[long id] => store.LookupCustomer(id); 

インデクサーは読み取り専用する必要があります。また、getアクセサに キーワードを使用しないでください。インデクサ•

インデクサ概要

は、配列と同様にインデックスを作成するオブジェクトを可能にします。

getアクセサが値を返します。 A アクセサを設定すると値が割り当てられます。

このキーワードはインデクサーを定義するために使用されます。

• セットインデクサによって割り当てられる値を定義するには、valueキーワードを使用します。

インデクサーは整数値で索引付けする必要はありません。特定のルックアップメカニズムを定義する方法は、 です。

?インデクサーに負荷がかかります。

•インデクサーには、2次元配列にアクセスする など、複数の仮パラメータを含めることができます。

私はインデクサーとして自分のインデクサー機能を書かなくても、どのプロパティをインデクサーとして使うことができるかを知りたいです。しかしそれまでLinqがいます。

ライン47 である興味深い部分は、(更新:より良い画像を使用して)あなたは、C# `一覧 `上のインデックスを使用しようとしているので、あなたが受けている enter image description here

0

私は特定の参照できるようにどのように私はLstのクラスを作成しますインスタンス はクラスのプロパティですか?

LINQを使用して、条件に一致する項目をリストから取得できます。 Weyland油谷へ

class Program 
{ 
    static void Main(string[] args) 
    { 
     List<Lst> l = new List<Lst>(); 
     l.Add(new Lst("1stList")); 
     Console.WriteLine("List {0}:", l.First(item => item.Name == "1stList").Name); 
     Console.WriteLine("List {0}:", l.First(item => item.Name == "2ndList").Name); 
     Console.ReadKey(); 
    } 
} 

public class Lst 
{ 
    public string Name; 
    public Lst(string Name) { this.Name = Name; } 
} 
+0

@の代わりに()の代わりに角括弧を使用する 'publicオブジェクトthis []'プロパティの構文の名前はありますか? – Steve

+0

インデクサーhttps://msdn.microsoft.com/en-us/library/6x16t2tx.aspx –

+0

ゲッター/セッターで使用されている式の本文ですか? – Steve

関連する問題