我有一个ProductService
类,它定义了以下方法。它不起作用,我将在下面进一步解释,但它给出了编译错误 CS1061:'ProductService'不包含'GetByid'的定义。除非我放弃了方法重载,否则为什么其他代码看不到GetById的公共过载?
public IEnumerable<Product> ListActiveByCatId(Guid catId) {
return _entityContext.Products
.Include("Category")
.Where(p => p.Category.id == catId);
}
public Product GetById(string productId) {
return new Product();
}
private Product GetByid(Guid productId) {
return _entityContext.Products.First(p => p.id == productId);
}
我使用ProductService
使用以下代码,并且此调用上有两个编译错误:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
var productId = Request["productId"];
if (productId == null) {
// TODO How to get the actual parameter, not default parameter.
productDetailDataSource.SelectParameters["productId"].DefaultValue = DefaultProductId;
}
*itemTitleLabel.Text = _productService.GetByid(productId).Name;*
}
}
确切的编译错误是:
C:\ SCS \产品\ Details.aspx.cs(21,51): 错误CS1061:'ProductService'有 不包含'GetByid'的定义 没有扩展方法'GetByid' 接受第一个类型的参数 可以找到'ProductService'(是 你错过了使用指令或 装配参考?)
第21行是我试图强调的,即上面调用代码中带有星号的那一行。
答案 0 :(得分:4)
GetByid
!= GetById
你有套管问题。
答案 1 :(得分:4)
首先,您的 GetByid
方法设置为private
,因此无法从您的课外访问。
其次, GetByid 方法实际上不是 GetById 方法的重载,因为C#区分大小写,并且您的方法名称都不相同,考虑了大小写
第三,Request["productId"]
不会返回对象吗?如果是这样,则可能无法进行直接类型转换,从而导致编译器无法找到以对象作为输入参数的方法的重载。
编辑#1
C:\ SCS \ Products \ Details.aspx.cs(21,51):错误CS1061:'ProductService'不包含'GetByid'的定义,也没有扩展方法'GetByid'接受类型'的第一个参数可以找到ProductService'(您是否缺少using指令或程序集引用?)
Request["productId"]
返回的对象似乎是您的ProductService
类的实例,该值会提供给您的GetByid
方法。我看不到任何GetById
方法重载将ProductService
的实例作为输入参数。
也许使用多态可能有助于您了解这里发生了什么。 var
关键字是已解析类型的占位符,因此值得您使用Request["productId"]
对象类型。因此,如果此调用返回的此对象为ProductService
,则var
将替换为ProductService
。在调用GetByid
时输入此值会导致GetByid
方法的重载应接受ProductService
作为参数,但不存在此类重载。默认情况下没有找到可接受的重载,编译器告诉你它无法解析你的方法调用,因为它找不到任何适合调用的方法。
确保Request["productId"]
返回预期类型的值,该值似乎是 int 。
我建议您尽可能使用类型而不是var
。这可以指出问题的正确来源,例如,类型object
无法直接转换为int
或类似的东西。
答案 2 :(得分:3)
检查外壳。我建议不要仅根据情况改变方法名称(至少不是故意的!)
itemTitleLabel.Text = _productService.GetById(productId).Name;
答案 3 :(得分:0)
var productId = Request["productId"];
您的变量productId可能是Object
类型,并且您没有方法GetById接受对象作为参数。
如果是这样,我建议你用这个换一行:
var productId = Request["productId"] as string;
另外,如上所述检查套管(GetById和GetByid)