我有以下
public AttributeCollection(string objectUrn) : this(new Uri(objectUrn)) { }
public AttributeCollection(Uri objectUrn) : base(() => Service.FindAllByObjectUrn(objectUrn).ToList())
{
ObjectUrn = objectUrn;
}
lambda在主题中抛出错误。奇怪的是,在从Visual Studio 2008转换到Visual Studio 2010之前,代码编译得很好。它仍然以.NET framework 3.5为目标。我不明白从迁移到2010年可能会发生什么变化会影响到这一点。有什么指针吗?
修改 基类如下所示:
[Serializable]
public abstract class OneToManyCollection<T> : ICollection<T>, IEnumerable<T>, IEnumerable, ISerializable
{
public OneToManyCollection();
public OneToManyCollection(Func<IEnumerable<T>> lazyLoader);
public OneToManyCollection(ICollection<T> items);
public OneToManyCollection(SerializationInfo info, StreamingContext context);
protected virtual ICollection<T> Added { get; }
public virtual int Count { get; }
public virtual bool IsDirty { get; }
public virtual bool IsReadOnly { get; }
protected virtual ICollection<T> Items { get; }
protected virtual ICollection<T> Removed { get; }
public virtual void Add(T newItem);
public virtual void Clear();
protected virtual void ClearIsDirty();
public virtual bool Contains(T item);
public virtual void CopyTo(T[] array, int arrayIndex);
public IEnumerator<T> GetEnumerator();
public void GetObjectData(SerializationInfo info, StreamingContext context);
public virtual bool Remove(T oldItem);
public abstract void Save();
}
答案 0 :(得分:0)
您可能只需要告诉C#您的lambda的类型是什么(您必须将T
更改为实际类型):
public AttributeCollection(Uri objectUrn) :
base((Func<IEnumerable<T>>)
(() => Service.FindAllByObjectUrn(objectUrn).ToList()))
{
ObjectUrn = objectUrn;
}
另请注意,.ToList()
不是必需的,因为您应该有IEnumerable<T>
。
答案 1 :(得分:0)
看来你的lambda expresion返回List<Uri>
,你的构造函数需要Func<IEnumerable<Uri>>
。编译器可能会混淆委托lambda表达式的内容。
尝试将代码更改为此。
public AttributeCollection(Uri objectUrn) : base(new Func<IEnumerable<Uri>>(() => Service.FindAllByObjectUrn(objectUrn).ToList()))
{
ObjectUrn = objectUrn;
}