private IMember ResolveVisibleFieldPropertyOrEvent(Expression sourceNode, IType type, string name)
{
IEntity candidate = ResolveFieldPropertyEvent(type, name);
if (null == candidate) return null;
if (IsVisibleFieldPropertyOrEvent(candidate)) return (IMember)candidate;
if (!candidate.IsAmbiguous()) return null;
IList<IEntity> found = ((Ambiguous)candidate).Select(IsVisibleFieldPropertyOrEvent);
if (found.Count == 0) return null;
if (found.Count == 1) return (IMember)found[0];
Error(sourceNode, CompilerErrorFactory.AmbiguousReference(sourceNode, name, found));
return null;
}