我知道这意味着什么,我搜索了Google和MSDN。但是,我怎么能绕过这个呢?
我在App_Code文件夹中的razor代码中有一个函数(使用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);
}
}
}
我已经尝试了一些事情,看看它是否有效,但不是。我显然做错了,但这就是我在桌面应用程序中的表现方式,我不明白为什么WebPages会有所不同,以及我这样做会怎么样?
谢谢!
答案 0 :(得分:5)
您无法使用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)
答案 1 :(得分:2)
只需将参数列表中的变量替换为具体类型即可。
所以假设他们是字符串你会有这个:
公共无效 CalculateTotalPriceInCart(串 PartNumber,字符串描述,字符串 OrderId,bool IsBoxed)
答案 2 :(得分:2)
您不能使用var
作为方法参数的类型。它必须是一个真实的类型(字符串,int,Object等)。 var
只能在方法内部使用(例如在foreach中)
答案 3 :(得分:1)
这是您的实际代码吗?
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来自查询字符串,因此它们绝对是字符串,而true
绝对是bool
所以IEnumerable<dynamic>
必须是OrderId。
但这并不能完全解决问题,因为Session["OSFOID"]
是一些值集合而不是单个值。如果您确定它是单个值,请尝试
CalculateTotalPriceInCart(Request.QueryString["PartNumber"], Request.QueryString["Description"], ((IEnumerable<string>)Session["OSFOID"]).FirstOrDefault(), true);
如果这不起作用,那么你在Session中所做的不是你想象的那样。
关于
我尝试了一些事情,看看它是不是 工作,但不。我显然是在做这件事 错了,但这就是我做的方式 桌面应用程序,我不知道它为什么 WebPages的不同之处,以及如何 我会这样做吗?
这也不适用于桌面应用,您根本无法将var
定义为参数类型。你可以得到的最接近的是dynamic
,它不会给你智能感知(因为编译器不知道类型是什么),但它会让你传递一个编译器未知的类型并使用它(假设< strong> 你 知道实际的类型是什么)
答案 4 :(得分:0)
像往常一样,这很愚蠢。 为什么不使用声明它作为构造函数的返回类型的类型?。 作为“规则” var 只应与构造函数一起使用。 如果你对此有一些深层次的问题..将dim引入csharp;
只需在编译时更改类引用的标记即可。