asp.net 网页表单页面代码隐藏的扩展方法问题

Problem with extension method with asp.net web form page code behind

我正在创建一个扩展方法来使用 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 签名,它的工作方式如下

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

我需要使用此扩展来检查任何数据行,并在将来检查任何数据表 我可以使用以下方法检查空数据表

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

扩展方法是 "extensions" 的一种类型。在您的情况下,您正在扩展 DataRow class。对于扩展方法,您需要有一个 class 的实例来调用它,例如:

DataRow[] row =getRowMethod();

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

在示例中,扩展方法在 DataRow class 的实例 row 上调用。

如果您认为 this 关键字表示 "this method can be called on an instance of 'this' class" - 在您的情况下是 DataRow,这可能有助于您理解它。

最后我得到了下面的解决方案,谢谢大家...您提出的所有建议都很有帮助

 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());
        }