上下文关键字';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关键字定义方法参数,因为编译器无法在编译时确定方法签名。
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(因为编译器不知道类型是什么(,但它会让你传递一个编译器未知的类型并使用它(假设你知道实际类型是什么。(