Здесь дело обстоит не так, как с помощью IntervalIndex
, мы сверяем с numpy
броском доски
s1=df2.Start.values
s2=df2.Stop.values
s=df1.Value.values[:,None]
np.dot((s>=s1)&(s<=s2),df2.Fruit)
array(['Apple', 'Orange', 'Orange', 'Mango'], dtype=object)
Это была проблема на сайте codeplex, вы можете найти здесь код (посмотрите внизу этой ветки, и они сделали метод расширения ... очень удобный)
http: // unity .codeplex.com / Thread / View.aspx? ThreadId = 24543
, и вы можете использовать такой код:
if (container.CanResolve<T>() == true)
{
try
{
return container.Resolve<T>();
}
catch (Exception e)
{
// do something else
}
}
CanResolve
- это метод расширения. Я фактически регистрирую это расширение при создании контейнера ... примерно так:
private void CreateContainer()
{
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = // path to config file
// get section from config code goes here
IUnityContainer container = new UnityContainer();
container.AddNewExtension<UnityExtensionWithTypeTracking>();
section.Containers.Default.Configure(container);
}
Это недоступно в текущем выпуске. Тем не менее, вы всегда можете «свернуть свой собственный», используя методы расширения в C # 3. Как только Unity поддерживает это, вы можете опустить или обновить метод расширения.
public static class UnityExtensions
{
public static T TryResolve<T>( this UnityContainer container )
where T : class
{
try
{
return (T)container.Resolve( typeof( T ) );
}
catch( Exception )
{
return null;
}
}
}
Похоже, в нем отсутствует эта функция. В этой статье показан пример включения метода Resolve в блок try / catch для его реализации.
public object TryResolve(Type type)
{
object resolved;
try
{
resolved = Resolve(type);
}
catch
{
resolved = null;
}
return resolved;
}
Также обратите внимание, что если вы используете Unity 2.0, вы можете использовать новый метод IsRegistered() и его общая версия .