По мере развития PowerShell и изучения пользовательских классов, я продолжаю использовать это странное исключение, которое сохраняется до тех пор, пока я не внесу какие-либо изменения.
> PS C:\Users\Purpl_000> C:\PS\Node\NodeTest.ps1 Cannot convert the
> "Node" value of type "Node" to type "Node". At
> C:\PS\Node\NodeTest.ps1:5 char:1
> + [Node]$node1 = New-Object Node -Property @{Next=$null; Value=3};
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException
> + FullyQualifiedErrorId : RuntimeException Exception setting "Next": "Cannot convert the "Node" value of type "Node" to type
> "Node"." At C:\PS\Node\NodeTest.ps1:9 char:1
> + $node2.Next = $node1;
> + ~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : NotSpecified: (:) [], SetValueInvocationException
> + FullyQualifiedErrorId : ExceptionWhenSetting New-Object : The value supplied is not valid, or the property is read-only. Change the
> value, and then try again. At C:\PS\Node\NodeTest.ps1:13 char:16
> + [Node]$node3 = New-Object Node -Property @{Next=$node2; Value=9};
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : InvalidData: (:) [New-Object], Exception
> + FullyQualifiedErrorId : SetValueException,Microsoft.PowerShell.Commands.NewObjectCommand
> Cannot find an overload for "new" and the argument count: "2". At
> C:\PS\Node\NodeTest.ps1:22 char:1
> + [Node]$node4 = [Node]::new($node3, 12);
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : NotSpecified: (:) [], MethodException
> + FullyQualifiedErrorId : MethodCountCouldNotFindBest
Вот Node.ps1
class Node
{
[Node]$Next;
[int]$Value;
# .ctor
Node([Node]$next, [int]$value)
{
$this.Next = $next;
$this.Value = $value;
}
# default .ctor
Node() {}
static [int] Method1([Node]$n1)
{
return $n1.Value;
}
static [Node] Method2([Node]$n2)
{
$n2.Value = $n2.Value + 5;
return $n2.Value;
}
}
Вот NodeTest.ps1
. 'C:\PS\Node\Node.ps1';
[Node]$node1 = New-Object Node -Property @{Next=$null; Value=3};
[Node]$node2 = [Node]::new();
$node2.Next = $node1;
$node2.Value = 5;
[Node]$node3 = New-Object Node -Property @{Next=$node2; Value=9};
[Node]$node4 = [Node]::new($node3, 12);
Я работаю в PowerShell ISE. Node.ps1 сохранен и успешно запущен. NodeTest.ps1 также сохраняется, но дует иногда вверх до Я делаю любые кажущиеся не относящимися к делу изменения в файле, сохраняю, затем Запускаю сценарий снова. В этот момент все снова работает нормально. Примеры изменений, которые разрешили проблему: (1) добавление дополнительной строки пробела, (2) удаление дополнительной строки пробела, (3) добавление комментария и т. Д.
Я понимаю
New-Object : The value supplied is not valid, or the property is read-only. Change the value, and then try again.
через мое тестирование того, что происходит, когда вы используете неправильные типы, но не совсем уверен, почему я периодически вижу это. Простой пример намеренного повторения этой ошибки путем передачи int , где ожидается Node . :)
[Node]$node3 = New-Object Node -Property @{Next=5; Value=9};
Следующие слова меня смущают. Как Node не может быть Node , а затем волшебным образом Node снова после добавления пустой строки в NodeTest.ps1 ?
Exception setting "Next": "Cannot convert the "Node" value of type "Node" to type "Node"."
Любая информация, объяснения или образование будут чрезвычайно признательны!
Спасибо всем!
Michael