пытается создать собственный командлет, который принимает [ref] в качестве параметра - PullRequest
2 голосов
/ 01 февраля 2012
//powershell code

$quiotent = divRemainderQuiotent ($a) ($b) ([ref] $remainder) # I need to pass this $remainder as reference

Для этого мне нужно передать его как PSReference

//csharp code 

private PSReference remainder= null;
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1044:PropertiesShouldNotBeWriteOnly"),
       Parameter(
           Position = 2,
           Mandatory = true,
           ValueFromPipeline = true)]
        [ValidateNotNullOrEmpty]
        public PSReference Remainder // if I don’t use this and use a value type and later change it to ref (inside C#) the result won’t bubble up, which I think is bad.
        {
            set { remainder = value; }
        }

Но теперь возникает проблема, функция, которая принимает этот параметр в качестве целочисленного значения.

  protected override void ProcessRecord()
        {
            //main method, this is executed when cmdlet is run
            int r = remainder ; //this is the problem I cannot convert PSReference to other object type (integer here).
            int q = _csharpDivideRemainderQuiotent(a,b, ref r); // if I change this function to take PSReference type, I will have to make changes down the line for every function.
            WriteObject(q);
        } // method ProcessRecord

1 Ответ

1 голос
/ 02 февраля 2012

Я не использовал PSReference раньше, но вы не могли просто сделать это:

protected override void ProcessRecord() 
{ 
    //main method, this is executed when cmdlet is run 
    int r = Convert.ToInt32(this.Remainder.Value); 
    int q = _csharpDivideRemainderQuiotent(a,b, ref r);
    this.Remainder.Value = r;
    WriteObject(q); 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...