Использование KeyedByTypeCollection в .NET?

Вы очень близки, но синтаксис foreach не делает то, что вы думаете.

Вам необходимо использовать foreach ($item in $hans), где $hans - это набор файлов, а $item представляет каждый «файл» в массиве во время «цикла».

(имя переменной $item может быть любым, это просто пример, который я использовал)

Свойство FullName содержит полный путь к файлу, который необходим для для [ 117].

Затем используйте Move-Item, если Select-String возвращает совпадение:

$source = 'Z:\Documents\16_Med._App\Aufträge\RuheEKG_24HBP_Skript\Ursprung_test'
$destination = 'C:\Destination'
$pattern = '24BHD'

$hans = Get-ChildItem $source -filter *.txt -recurse 

foreach($item in $hans) {
    if (Select-String -list -pattern $pattern -path $item.fullname) {
        Move-Item -Path $item.fullname -Destination $destination
    }
}
9
задан Community 23 May 2017 в 12:00
поделиться

1 ответ

AFAIK, этот универсальный набор служит в качестве простой обертки для KeyedCollection<KEY,VALUE> когда KEY Тип VALUE сохранить.

Например, очень удобно использовать этот набор, если Вы хотите реализовать фабрику, возвращая одиночные элементы:

public class Factory<T>
{
    private readonly KeyedByTypeCollection<T> _singletons = new KeyedByTypeCollection<T>();

    public V GetSingleton<V>() where V : T, new()
    {
        if (!_singletons.Contains(typeof(V)))
        {
            _singletons.Add(new V());
        }
        return (V)_singletons[typeof(V)];
    }
}

Использование этой простой фабрики было бы чем-то как следующее:

    [Test]
    public void Returns_Singletons()
    {
        Factory<ICar> factory = new Factory<ICar>();
        Opel opel1 = factory.GetSingleton<Opel>();
        Opel opel2 = factory.GetSingleton<Opel>();

        Assert.IsNotNull(opel1);
        Assert.IsNotNull(opel2);
        Assert.AreEqual(opel1, opel2);
    }

Другое использование для KeyedByTypeCollection<T> был бы в сервисном локаторе...

13
ответ дан 4 December 2019 в 13:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: