【发布时间】:2019-10-17 23:54:30
【问题描述】:
我正在创建一个扩展方法来使用 c# 检查空数据行,我正在尝试在我的 asp.net Web 表单代码中使用扩展方法,但告诉我 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());
}
【问题讨论】:
-
当遇到此类问题时,我通常会使用临时变量将代码拆分为多行。这样我就可以依次调试每个操作并获得正确的异常消息。没有什么可担心的性能。 JiT 编译器完全能够切割未充分利用的变量。如果有的话,通常到是好的。即使有,代码的可读性和可调试性也可能胜过那一点点差异。
-
我使用的是 c# 编译器而不是 jit ,并且在编码时调用方法的问题不是在运行时
-
即时编译器由运行时在 MSIL 上运行,在它接近 CPU 之前。所以它在这里完全适用。 en.wikipedia.org/wiki/Just-in-time_compilation
-
这就是你不使用扩展方法的方式。 docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
-
如果它是一个扩展方法,你应该把它称为
row[0].IsEmpty()。这就是为什么它被称为扩展方法,因为它使用新的方法扩展了一个类型。您只需确保使用正确的using语句导入静态类。