Красное подчеркивание ReSharper при выводе типа в VS 2010

Я получаю странную ошибку в 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.

Код:

По запросу, вот код.

Вот StaffRepository:

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;
        }

        ...
    }
}
6
задан cdmckay 14 June 2011 в 02:01
поделиться