System.Dynamic.DynamicObject TryGetMember не работает в PowershellC#

Место общения программистов C#
Anonymous
System.Dynamic.DynamicObject TryGetMember не работает в Powershell

Сообщение Anonymous »

редактировать
как мне стыдно! проблема была в опечатке, которую я не заметил. Обещаю в следующий раз быть более внимательным при чтении своего кода.

После этого ответа на мой вопрос «получить или установить несуществующие свойства объекта Powershell» я погуглил IDynamicMetaObjectProvider и нашел это1 и эти сообщения. Затем я попытался реализовать класс с помощью DynamicObject в PowerShell, но не получил ожидаемого результата.

Код: Выделить всё

$source = @'

using System.Dynamic;
using System.Collections.Generic;

public class testDynamicObject : DynamicObject
{
readonly Dictionary _dictionary = new Dictionary();

public override bool TryGetMember(GetMemberBinder binder, out object result)
{
return _dictionary.TryGetValue(binder.Name, out result);
}

public override bool TrySetMember(SetMemberBinder binder, object value)
{
_dictionary.Add(binder.Name,value);

object obj;
return _dictionary.TryGetValue(binder.Name, out obj);
}
}
'@

Add-Type -TypeDefinition $Source

$obj = [testDynamicObject]::new()
$obj.prob = 'abc'
$obj.prop
Код выполняется без ошибок, но $obj.prop не возвращает значения.
Может быть, я пропустил что-то очевидное при переходе с C# на PowerShell?
context

Код: Выделить всё

Name                           Value
----                           -----
PSVersion                      5.1.19041.6456
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.6456
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
[1] исходное сообщение на французском языке

Вернуться в «C#»