Как получить доступ к свойствам объекта динамически c? - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть, на мой взгляд, плохо выглядящий код, поскольку в настоящее время я обновляю свойства в каждом конкретном случае с помощью оператора switch. Вместо этого я хотел бы динамически обновить свойство, если $Key с тем же именем, что и свойство, можно найти в $PSBoundParameters. Обратите внимание, что каждый данный $Key предполагается также существующим как свойство в объекте InputObject.

Мое текущее решение:

foreach ($Key in $PSBoundParameters.Keys) {
    switch ($Key) {
        { $_ -Match "^TimeToLive$"} { $InputObject.RecordData.TimeToLive = $PSBoundParameters[$Key] }
        { $_ -Match "^AllowUpdateAny$"} { $InputObject.RecordData.AllowUpdateAny = $PSBoundParameters[$Key] }
        { $_ -Match "^IPv4Address$"} { $InputObject.RecordData.IPv4Address = $PSBoundParameters[$Key] }
        { $_ -Match "^IPv6Address$"} { $InputObject.RecordData.IPv6Address = $PSBoundParameters[$Key] }
        { $_ -Match "^HostNameAlias$"} { $InputObject.RecordData.HostNameAlias = $PSBoundParameters[$Key] }
        { $_ -Match "^PtrDomainName$"} { $InputObject.RecordData.PtrDomainName = $PSBoundParameters[$Key] }
        { $_ -Match "^MailExchange$"} { $InputObject.RecordData.MailExchange = $PSBoundParameters[$Key] }
        { $_ -Match "^Preference$"} { $InputObject.RecordData.Preference = $PSBoundParameters[$Key] }
        { $_ -Match "^DomainName$"} { $InputObject.RecordData.DomainName = $PSBoundParameters[$Key] }
        { $_ -Match "^Priority$"} { $InputObject.RecordData.Priority = $PSBoundParameters[$Key] }
        { $_ -Match "^Weight$"} { $InputObject.RecordData.Weight = $PSBoundParameters[$Key] }
        { $_ -Match "^Port$"} { $InputObject.RecordData.Port = $PSBoundParameters[$Key] }
    }
}

Псевдокод того, что я хочу, чтобы мое решение выглядело так:

Для каждого $Key в $PSBoundParameters
Установите $InputObject.RecordData свойство имени $Key в значение текущей пары ключ / значение


Любое улучшение моего текущего решения высоко ценится. Спасибо.

1 Ответ

1 голос
/ 26 апреля 2020

Вам потребуется список имен параметров для фильтрации, после чего вы можете упростить свой l oop до:

$RecordDataPropertyNames = 'TimeToLive', 'AllowUpdateAny', 'IPv4Address', 'IPv6Address', 'HostNameAlias', 'PtrDomainName', 'MailExchange', 'Preference', 'DomainName', 'Priority', 'Weight', 'Port'

# ...

foreach($key in $PSBoundParameters.Keys |Where {$_ -in $RecordDataPropertyNames}){
    $InputObject.RecordData.$key = $PSBoundParameters[$key]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...