سؤال

يتيح لك DataGridView، على سبيل المثال، القيام بذلك:

DataGridView dgv = ...;
DataGridViewCell cell = dgv[1,5];

لكن طوال حياتي لم أتمكن من العثور على الوثائق الخاصة بمشغل الفهرس/الأقواس المربعة.ماذا يسمونه؟أين يتم تنفيذه؟هل يمكن رميها؟كيف يمكنني أن أفعل نفس الشيء في فصولي الخاصة؟

الوقت المتوقع للوصول:شكرا لجميع الإجابات السريعة.باختصار:الوثائق ذات الصلة موجودة ضمن خاصية "العنصر"؛طريقة التحميل الزائد هي عن طريق الإعلان عن خاصية مثل public object this[int x, int y]{ get{...}; set{...} };لا يتم طرح مفهرس DataGridView، على الأقل وفقًا للوثائق.ولا يذكر ما يحدث إذا قمت بتوفير إحداثيات غير صالحة.

الوقت المتوقع للوصول مرة أخرى:حسنًا، على الرغم من أن الوثائق لم تذكر ذلك (مايكروسوفت المشاغب!)، فقد اتضح أن مفهرس DataGridView سيرمي في الواقع ArgumentOutOfRangeException إذا قمت بتزويده بإحداثيات غير صالحة.تحذير عادل.

هل كانت مفيدة؟

المحلول

ويمكنك العثور على كيفية القيام بذلك هنا . باختصار هو:

public object this[int i]
{
    get { return InnerList[i]; }
    set { InnerList[i] = value; }
}

إذا كنت تحتاج فقط جالبة بناء الجملة في الإجابة على ما يلي يمكن استخدامها كذلك (بدءا من C 6 #).

نصائح أخرى

وهذا من شأنه أن يكون ملكا البند: http://msdn.microsoft.com /en-us/library/0ebtbkkc.aspx

وربما شيء من هذا القبيل سوف تعمل:

public T Item[int index, int y]
{ 
    //Then do whatever you need to return/set here.
    get; set; 
}
Operators                           Overloadability

+, -, *, /, %, &, |, <<, >>         All C# binary operators can be overloaded.

+, -, !,  ~, ++, --, true, false    All C# unary operators can be overloaded.

==, !=, <, >, <= , >=               All relational operators can be overloaded, 
                                    but only as pairs.

&&, ||                  They can't be overloaded

() (Conversion operator)        They can't be overloaded

+=, -=, *=, /=, %=                  These compound assignment operators can be 
                                    overloaded. But in C#, these operators are
                                    automatically overloaded when the respective
                                    binary operator is overloaded.

=, . , ?:, ->, new, is, as, sizeof  These operators can't be overloaded

    [ ]                             Can be overloaded but not always!

مصدر المعلومات

للقوس:

public Object this[int index]
{

}

لكن

عامل فهرسة المصفوفة لا يمكن التحميل الزائد;ومع ذلك، يمكن للأنواع تعريف المفهرسات، والخصائص التي تأخذ معلمة واحدة أو أكثر.يتم وضع معلمات المفهرس بين قوسين مربعين، تمامًا مثل مؤشرات المصفوفة، ولكن يمكن تعريف معلمات المفهرس بأنها من أي نوع (على عكس مؤشرات المصفوفة، التي يجب أن تكون متكاملة).

من MSDN

public class CustomCollection : List<Object>
{
    public Object this[int index]
    {
        // ...
    }
}

بالنسبة لـ CLI C++ (المترجمة مع /clr) راجع رابط MSDN هذا.

باختصار، يمكن إعطاء الخاصية اسم "افتراضي":

ref class Class
{
 public:
  property System::String^ default[int i]
  {
    System::String^ get(int i) { return "hello world"; }
  }
};

إذا كنت تستخدم C # 6 أو في وقت لاحق، يمكنك استخدام بناء الجملة التعبير جسديا لمفهرس الحصول فقط:

وpublic object this[int i] => this.InnerList[i];

وهنا مثال إرجاع قيمة من كائن قائمة الداخلي. يجب أن تعطيك فكرة.

  public object this[int index]
  {
     get { return ( List[index] ); }
     set { List[index] = value; }
  }

إذا كنت تعني مفهرس مجموعة ،، أنت الزائد أن فقط من خلال كتابة خاصية مفهرس .. ويمكنك الزائد، (كتابة كثير كما تريد) خصائص مفهرس طالما كل واحد له توقيع المعلمة مختلفة

public class EmployeeCollection: List<Employee>
{
    public Employee this[int employeeId]
    {   
        get 
        { 
            foreach(var emp in this)
            {
                if (emp.EmployeeId == employeeId)
                    return emp;
            }

            return null;
        }
    }

    public Employee this[string employeeName]
    {   
        get 
        { 
            foreach(var emp in this)
            {
                if (emp.Name == employeeName)
                    return emp;
            }

            return null;
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top