Как использовать индексаторы с Дополнительными Методами, имеющими параметр и вызовы функции

Действительно ли возможно использовать indexers с extension методы.

например, Рассмотрите это как пример только.

    public static object SelectedValue(this DataGridView dgv, string ColumnName)
    {            
        return dgv.SelectedRows[0].Cells[ColumnName].Value;
    }

Править

  1. использование mygrid.SelectedValue("mycol")

  2. Как использовать его в качестве индексатора mygrid.SelectedValue["mycol"] вместо выше одного.

  3. Действительно ли возможно использовать его как это также? mygrid.SelectedValue["mycol"](out somevalue);

Что является синтаксисом получения этого вида значений. Любой простой пример или ссылка будут работать.

5
задан Shantanu Gupta 25 June 2010 в 10:58
поделиться

2 ответа

Ну, здесь есть две проблемы:

  • C# (по большому счету) не поддерживает именованные индексаторы1
  • C# не поддерживает свойства расширения, поэтому вы не можете сделать SelectedValue свойством, возвращающим что-то индексируемое вместо него

Так что нет, синтаксис, который вы там указали, не будет работать. Вы могли бы заставить это работать:

mygrid.SelectedValue()["mycol"]

но это немного некрасиво. На вашем месте я бы придерживался формы метода.


1 C# 4 поддерживает вызов именованных индексаторов на COM-объектах.

4
ответ дан 15 December 2019 в 00:50
поделиться

Позвольте мне попытаться прояснить использование и намерения Extension Method .

Рассмотрим метод расширения

public static bool IsNullOrEmpty(this string source)
{
    return source == null || source == string.Empty;
}

Теперь вы расширяете свой класс string с помощью этого метода расширения

var myString = "Hello World";
Assert.AreEqual(myString.IsNullOrEmpty(), false);

Вот что делает .NET при компиляции:

public static bool IsNullOrEmpty(string source)
{
    return source == null || source == string.Empty;
}

Используя наш старый school

var myString = "Hello World";
Assert.AreEqual(IsNullOrEmpty(myString), false);

Метод расширения - это не что иное, как визуализация того, что мы привыкли делать.

Что ж, расширение индексаторов возможно, но Microsoft не думала об этом.

0
ответ дан 15 December 2019 в 00:50
поделиться