C# 错误属性或索引器无法在此上下文中使用,因为集合访问器不可访问
我有以下代码:C# 错误属性或索引器无法在此上下文中使用,因为集合访问器不可访问,c#,C#,我有以下代码: using System; using System.Collections.Generic; using System.Text; using ProjectBase.Utils; namespace EnterpriseSample.Core.Domain { public class Notifikasi : DomainObject<string>, IHasAssignedId<string> { public
using System;
using System.Collections.Generic;
using System.Text;
using ProjectBase.Utils;
namespace EnterpriseSample.Core.Domain
{
public class Notifikasi : DomainObject<string>, IHasAssignedId<string>
{
public string Name { get; set; }
public string Description { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public DateTime CreatedDate { get; set; }
public string CreatedBy { get; set; }
public DateTime UpdateDate { get; set; }
public string UpdateBy { get; set; }
public void SetAssignedIdTo(string assignedId)
{
Check.Require(!string.IsNullOrEmpty(assignedId), "assignedId may not be null or empty");
// As an alternative to Check.Require, which throws an exception, the
// Validation Application Block could be used to validate the following
Check.Require(assignedId.Trim().Length == 5, "assignedId must be exactly 5 characters");
ID = assignedId.Trim().ToUpper();
}
public override int GetHashCode()
{
return (GetType().FullName + "|" +
ID + "|" +
Name).GetHashCode();
}
}
}
您的问题缺少
DomainObject
的重要定义,但错误消息表明属性ID
声明如下:
public string ID
{
get;
protected set;
}
这意味着ID
的值可以被任何人读取,但只能从DomainObject
和派生类的实例内部进行设置
使用
SetAssignedIdTo
也不是一个选项,因为它需要5个字符,您要分配的ID只有两个字符长。我假设此方法的存在是为了能够手动将ID分配给通常具有自动递增键的表中的行。强制此ID使用5个字符可以在一定程度上确保手动分配的密钥不会与自动创建的密钥冲突。在类似这样的if条件下检查相等性时,我遇到了此错误:
public string ID
{
get;
protected set;
}
if(e.ChangeType=ChangeType.Update){
...
}
注意条件中的单个相等(我想我最近做了太多SQL了,哈哈)。出现此错误可能是因为我不愿意向具有只读访问权限的成员分配任务。添加另一个等号后,一切正常。您能显示
ID的声明吗?@O.R.Mapper我的ID是Identity,所以我不需要声明请查看我的code ID=assignedId.Trim().ToUpper()ID
是代码中的一个标识符,因此它当然需要/有一个声明。只有当我们能够看到声明时,我们才能理解为什么编译器不想让您写入ID
属性。也许ID像这样声明public int ID{get;private set;}
我也遇到了这种问题。我最终选择了一个新实体。我还需要这个“保护集”字段。。。我不知道如何克服这个问题。或者通过public void SetAssignedIdTo(string assignedId)
方法,从外观上看。@Rawling:没错,但这并不能改善情况。相反,您只是在规避“fail fast”,因为现在您有一个运行时异常,而不是编译时错误。。。