2014-09-27 3 views
0

PowerShell 3.0 및 4.0에서이 방법을 사용해 보았습니다. 클래스 내부에서 구조체를 사용하는 데 문제가 있습니다. PowerShell에서 구조체 내의 속성을 문제없이 직접 사용할 수 있습니다. PowerShell에서 직접 클래스 내의 표준 유형 속성을 문제없이 사용할 수도 있습니다. 그러나 두 클래스를 결합하면 (클래스 내에 사용자 정의 유형 속성을 사용하려고 시도합니다), 그렇게 할 수 없습니다.PowerShell의 사용자 정의 클래스에서 사용자 정의 구조체는 어떻게 사용합니까?

도움이 될 것입니다. 그 $ class1.Struct1Property.Property 및 $ class1.Struct2Property.Property 모두 출력해야 '테스트'

$MyTest = Add-Type @" 
namespace MyTest 
{ 
    public struct Struct1 
    { 
     public string Property; 
    } 

    public class Class1 
    { 
     public struct Struct2 
     { 
      public string Property; 
     } 

     public string MyString; 
     public Struct1 Struct1Property; 
     public Struct2 Struct2Property; 
    } 
} 
"@ -PassThru 

$struct1 = New-Object -TypeName MyTest.Struct1 
$class1 = New-Object -TypeName MyTest.Class1 
$struct1.Property = 'test' 
$struct1.Property # Outputs: test 
$class1.MyString = 'test' 
$class1.MyString # Outputs: test 
$class1.Struct1Property.Property = 'test' 
$class1.Struct1Property.Property # Outputs: <nothing> 
$class1.Struct2Property.Property = 'test' 
$class1.Struct2Property.Property # Outputs: <nothing> 

내가 기대 해요 :

여기에 제가 보는 것을 재현하는 빠른 샘플 코드입니다.

VS2013이있는 콘솔 응용 프로그램과 동일한 코드를 컴파일해도 제대로 작동합니다.

콘솔 응용 프로그램 코드 :

using System; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyTest.Struct1 struct1; 
      MyTest.Class1 class1 = new MyTest.Class1(); 

      struct1.Property = "test"; 
      Console.WriteLine("struct1.Property: {0}", struct1.Property); 

      class1.Struct1Property.Property = "test"; 
      Console.WriteLine("class1.Struct1Property.Property: {0}", class1.Struct1Property.Property); 

      class1.Struct2Property.Property = "test"; 
      Console.WriteLine("class1.Struct2Property.Property: {0}", class1.Struct2Property.Property); 
     } 
    } 
} 

namespace MyTest 
{ 
    public struct Struct1 
    { 
     public string Property; 
    } 

    public class Class1 
    { 
     public struct Struct2 
     { 
      public string Property; 
     } 

     public string MyString; 
     public Struct1 Struct1Property; 
     public Struct2 Struct2Property; 
    } 
} 

출력 :

struct1.Property: test 
class1.Struct1Property.Property: test 
class1.Struct2Property.Property: test 
+0

이이 분야하지 속성, 큰 차이가 있습니다. 속성 인 경우 동일한 C# 코드가 컴파일되지 않습니다. –

+0

"속성"에 대한 내 단어 선택을 말하고 있습니까? Get-Member cmdlet의 MemberType 출력에서 ​​가져 왔습니다. 그 단어 자체는 임의적이지만, 혼란에 대해 사과드립니다. 당신은 정확합니다, 그들은 참으로 밭입니다. 그럼에도 불구하고 PowerShell은 C#과 동일한 방식으로 구조를 처리하지 않는 것으로 보입니다. – Hossy

답변