Я получаю странную ошибку в VS 2010. У меня есть проект, настроенный на использование .NET Framework 4. Когда я набираю код:
var record = ...;
// returns IEnumerable<Staff>
var staff = new StaffRepository().GetAll();
// The method has two signatures:
// CreateSelectList(IEnumerable<object> enumerable, string value)
// CreateSelectList(IDictionary<object, object> enumerable, string value)
StaffList = SelectListHelper.CreateSelectList(staff, record.Staff);
CreateSelectList
в основном берет перечисляемые объекты, преобразует их в строки, используя ToString()
, а затем автоматически выбирает переданную строку.
Проблема заключается в том, что этот код получает красное подчеркивание в VS 2010 с ошибкой, указывающей, что он не может разрешить метод.
Однако, если я изменю код для явного произнесения типа:
IEnumerable<Staff> staff = new StaffRepository().GetAll();
StaffList = SelectListHelper.CreateSelectList(staff, record.Staff);
VS 2010 больше не выдает ошибку. Насколько я понимаю из обобщений, эти два фрагмента кода должны быть одинаковыми для компилятора, так почему же он подчеркивает ошибку?
Также:
Это также решит проблему:
var staff = new StaffRepository().GetAll();
StaffList = SelectListHelper.CreateSelectList(from s in staff select s, record.Staff);
ReSharper:
Я пытался удалить каталог _ReSharper
, но безуспешно. Я все еще получаю подчеркивание. Однако, если я приостановлю (т.е. выключу) ReSharper, красное подчеркивание исчезнет, так что это определенно вызвано ReSharper.
Код:
По запросу, вот код.
Репозиторий персонала:
namespace Foo.Client.Business.Repositories {
public class StaffRepository : StaffRepositoryBase<Staff, StaffCriteria, Discriminator> {
public StaffRepository(Discriminator discriminator) : base(discriminator) {
}
protected override Staff CreateStaff(MembershipUser user) {
return new Staff(user);
}
} // end class
}
Вот StaffRepositoryBase (где определен GetAll):
namespace Foo.Common.Business.Repositories {
public abstract class StaffRepositoryBase<TStaff, TStaffCriteria, TDiscriminator>
: IStaffRepository<TStaff, TStaffCriteria, TDiscriminator>
where TStaff : class, IStaff<TDiscriminator>
where TStaffCriteria : class, IStaffCriteria {
...
protected abstract TStaff CreateStaff(MembershipUser user);
public virtual IEnumerable<TStaff> GetAll() {
return from u in Membership.GetAllUsers().Cast<MembershipUser>()
let s = CreateStaff(u)
where s.Discriminator.Equals(Discriminator)
select s;
}
public virtual IEnumerable<TStaff> GetAll(LimitCriteria criteria) {
var staffs = GetAll()
.Skip(criteria.Skip.GetValueOrDefault())
.Take(criteria.Take.GetValueOrDefault());
return staffs;
}
public virtual IEnumerable<TStaff> GetAll() {
return from u in Membership.GetAllUsers().Cast<MembershipUser>()
let s = CreateStaff(u)
where s.Discriminator.Equals(Discriminator)
select s;
}
...
}
}