上下文关键字';var';可能只出现在局部变量声明问题中

本文关键字:局部变量 声明 问题 var 关键字 上下文 | 更新日期: 2023-09-27 18:01:30

我知道这意味着什么,我搜索过谷歌和MSDN。但是,否则我该怎么办呢?

我在App_code文件夹中的剃刀代码中有一个函数(使用WebMatrix(,我从数据库中获取信息,进行一些计算,然后用新的总数更新数据库。

但是,如果App_Code文件夹中的方法不允许,我该如何将变量传递给它?

这是我得到的:

EditQuantity.cshtml(根文件夹(:

        try
        {
            Base baseClass;
            baseClass.CalculateTotalPriceInCart(Request.QueryString["PartNumber"], Request.QueryString["Description"], Session["OSFOID"], true);
            Response.Redirect("~/Cart.cshtml");
        }
        catch(Exception exmes)
        {
            message = exmes;
        }

并且,Base.cs(在App_Code文件夹内(:

using System;
using System.Collections.Generic;
using System.Web;
using System.Text;
using WebMatrix.Data;
/// <summary>
/// Summary description for ClassName
/// </summary>
public class Base
{   
    public void CalculateTotalPriceInCart(var PartNumber, var Description, var OrderId, bool IsBoxed)
    {
        var database = Database.Open("OSF");
        var query = "";
        var result = "";
        decimal price = 0.00M;
        if(IsBoxed)
        {
            // Select item.
            query = "SELECT Boxes, BoxPrice FROM Cart WHERE OrderId = '" + OrderId + "' AND PartNumber = '" + PartNumber + "' AND Description = '" + Description + "' AND IsBoxed = 1";
            result = database.Query(query);
            // Recalculate Price.
            foreach(var item in result)
            {
                price = result.Boxes * result.BoxPrice;
            }
            // Update item.
            query = "UPDATE Cart SET BoxPrice = '" + price + "' WHERE OrderId = '" + OrderId + "' AND PartNumber = '" + PartNumber + "' AND Description = '" + Description + "' AND IsBoxed = 1";
            database.Execute(query);
        }
    }
}

我试了一些方法看看它是否有效,但没有。我显然做错了,但这就是我在桌面应用程序中的做法,我不明白为什么网页会有所不同,我该怎么做?

谢谢!

上下文关键字';var';可能只出现在局部变量声明问题中

不能用var关键字定义方法参数,因为编译器无法在编译时确定方法签名。

public void CalculateTotalPriceInCart(
         string Description, 
         string PartNumber, 
         string OrderId, 
         bool IsBoxed)

在另一条评论中,您说它不能将IEnumerable<dynamic>强制转换为string。所以正确地声明参数!我不知道是哪一个。

public void CalculateTotalPriceInCart(
         IEnumerable<dynamic> Description, // for example
         string PartNumber, 
         string OrderId, 
         bool IsBoxed)

不能将var用作方法参数的类型。它必须是一个真正的类型(字符串、int、Object等(。var只能在方法内部使用(如foreach中(

只需将参数列表中的vars替换为具体类型即可。

所以假设它们是字符串,你会得到这个:

公共无效CalculateTotalPriceInCart(字符串零件号,字符串描述,字符串订单ID,布尔IsBoxed(

和往常一样,这是愚蠢的。为什么不使用声明它作为构造函数的返回类型的类型?。作为";规则";var只能与构造函数一起使用。如果你对此有一些深层次的问题。。将dim引入csharp;

编译时只需更改类引用的标记即可。

这是您的实际代码吗?

Base baseClass;
baseClass.CalculateTotalPriceInCart(Request.QueryString["PartNumber"], Request.QueryString["Description"], Session["OSFOID"], true);

那一行甚至不应该编译。

关于错误铸造,请尝试:

public void CalculateTotalPriceInCart(string PartNumber, string Description, IEnumerable<dynamic> OrderId, bool IsBoxed)

由于PartNumber和Description来自querystring,所以它们肯定是字符串,而true肯定是bool,所以IEnumerable<dynamic>必须是OrderId。

不过,这并不能完全解决问题,因为Session["OSFOID"]是一些值的集合,而不是单个值。如果你确定它是一个单一的值,那么试试

CalculateTotalPriceInCart(Request.QueryString["PartNumber"], Request.QueryString["Description"], ((IEnumerable<string>)Session["OSFOID"]).FirstOrDefault(), true);

如果这不起作用,那么你在会话中投入的内容并不是你想象的那样

关于

我试了几件事,看看它是否会工作,但没有。我显然在这么做错了,但我就是这样做的桌面应用程序,我不明白为什么不同于此处的网页,以及如何我该怎么做?

这在桌面应用程序中也不起作用,您根本无法将var定义为参数类型。你能得到的最接近的是dynamic,它不会给你Intellisense(因为编译器不知道类型是什么(,但它会让你传递一个编译器未知的类型并使用它(假设知道实际类型是什么。(