相关疑难解决方法(0)

为什么这个扩展方法在VB.NET中抛出NullReferenceException?

从以前的经验来看,我一直认为在null实例上调用扩展方法是完全合法的(尽管可能不可取).所以在C#中,这段代码编译并运行:

// code in static class
static bool IsNull(this object obj) {
    return obj == null;
}

// code elsewhere
object x = null;
bool exists = !x.IsNull();
Run Code Online (Sandbox Code Playgroud)

但是,我只是为我的开发团队的其他成员组建了一小组示例代码(我们刚刚升级到.NET 3.5,我已经被分配了让团队加快一些新功能的任务我们可以使用),我写了我认为是上面代码的VB.NET等价物,但却发现它实际上抛出了一个NullReferenceException.我写的代码是这样的:

' code in module '
<Extension()> _
Function IsNull(ByVal obj As Object) As Boolean
    Return obj Is Nothing
End Function

' code elsewhere '
Dim exampleObject As Object = Nothing
Dim exists As Boolean = Not exampleObject.IsNull()
Run Code Online (Sandbox Code Playgroud)

调试器就在那里停止,好像我调用了一个实例方法.我做错了什么(例如,我在C#和VB.NET之间定义扩展方法的方式有一些细微差别)吗?在VB.NET中调用null实例上的扩展方法实际上是合法的,尽管它在C#中是合法的吗?(我原以为这是一个.NET的东西,而不是语言特定的东西,但也许我错了.)

任何人都可以向我解释这个吗?

.net vb.net extension-methods nullreferenceexception

23
推荐指数
2
解决办法
2700
查看次数

.Net(C#)中ISNULL()的等效方法是什么?

我有一个存储过程用于我的购物车系统,它返回总金额,看起来像这样;

ALTER PROCEDURE [dbo].[ShoppingCartGetTotalAmount]
(@CartID char(36))
AS
SELECT ISNULL(SUM(Product.Price * ShoppingCart.Quantity), 0)
FROM ShoppingCart INNER JOIN Product
ON ShoppingCart.ProductID = Product.ProductID
WHERE ShoppingCart.CartID = @CartID
Run Code Online (Sandbox Code Playgroud)

但是,现在我想在Entity Framework中做同样的事情.因此,我需要知道以下任一选项;
1)如何在Entity FrameWork中执行上述任务,即

SELECT ISNULL(SUM(Product.Price * ShoppingCart.Quantity), 0)
    FROM ShoppingCart INNER JOIN Product
    ON ShoppingCart.ProductID = Product.ProductID
    WHERE ShoppingCart.CartID = @CartID
Run Code Online (Sandbox Code Playgroud)

2)或者C#中SQL ISNULL()函数的等效是什么?
3)或者我怎样才能实现这一点 - > ISNULL(SUM(Product.Price * ShoppingCart.Quantity), 0) 使用任何.Net方法?

c# sql ado.net entity-framework

2
推荐指数
1
解决办法
4043
查看次数