Проблема с расширением метода с кодом страницы веб-формы asp.net позади - PullRequest
1 голос
/ 18 октября 2019

Я создаю метод расширения для проверки нулевого datarow с помощью c #, я пытаюсь использовать метод расширения в своем коде веб-формы asp.net, но я сообщаю, что метод IsEmpty в текущем контексте не соответствует приведенному здесь коду. я пытаюсь

 public static class IsNullValidator
    {
        public static bool IsNullEquivalent( this object value)
        {
            return value == null
                   || value is DBNull
                   || string.IsNullOrWhiteSpace(value.ToString());
        }
        public static bool IsEmpty( this DataRow row)
        {
            return row == null || row.ItemArray.All(i => i.IsNullEquivalent());
        }
    }

и я называю это так

DataRow[] row =getRowMethod();
if IsEmpty(row){"do some functionality"}

, если я изменил IsEmpty Signature, удалив это ключевое слово ниже, оно работает так:

   public static bool IsEmpty(  DataRow row)
            {
                return row == null || row.ItemArray.All(i => i.IsNullEquivalent());
            }
   if IsEmpty(row[0]){"do some functionality"}

Мне нужно работать с этим расширением, чтобы проверить любой datarow и в будущем, чтобы проверить любой datatable и могу ли я использовать метод ниже для проверки null datatable

 public static bool IsEmptyDatatable (DataTable dt)
    {
        return dt == null || dt.Rows.Cast<DataRow>().Where(r=>r.ItemArray[0]!=null).All(i => i.IsNullEquivalent());
    }

Ответы [ 2 ]

1 голос
/ 19 октября 2019

наконец я закончил с нижеприведенным решением, спасибо, люди ... все, что вы предложили, было полезно

 public static bool IsNullEquivalent( this object value)
        {
            return value == null
                   || value is DBNull
                   || string.IsNullOrWhiteSpace(value.ToString());
        }
        public static bool IsEmptyDataRow(this  DataRow row)
        {
            return row == null || row.ItemArray.All(i => i.IsNullEquivalent());
        }
        public static bool IsEmptyDatatable (this DataTable dt)
        {
            return dt == null || dt.Rows.Cast<DataRow>().All(i => i.IsEmptyDataRow());
        }
1 голос
/ 18 октября 2019

Методы расширения являются «расширениями» типа. В вашем случае вы расширяете класс DataRow. Для методов расширения вам нужно иметь экземпляр этого класса для его вызова, например:

DataRow[] row =getRowMethod();

if row.IsEmpty(){"do some functionality"}

В этом примере метод расширения вызывается для экземпляра row класса DataRow.

Если вы думаете о ключевом слове this как о том, что «этот метод может быть вызван для экземпляра класса« this »» - в вашем случае это DataRow, это может помочь вам понять его.

...