如何使用PowerShell使用C#DLL中存在的类的New-Object - 不同的数据类型

时间:2012-06-13 03:27:47

标签: c# list object dll powershell

编辑:添加了使用C#对象的Powershell代码。真的很容易在C#中完成所有操作并在Powershell中使用它。谢谢!

我正在使用我的PowerShell代码在C#中创建两个对象。我想制作一个FeatureObject,设置它的变量;然后创建FeatureAttributes并将其添加到FeatureObject的列表中。我可以设置并获取字符串,整数等等。但是我在FeatureObject中将FeatureAttribute添加到List中时遇到了麻烦。

C#

using System;
using System.Collections;
using System.Collections.Generic;
public class FeatureObject {
    public string layerName;
    public int numFeatures;
    public string geometry;
    public string unit;
    List<FeatureAttr> objFtcAttr;
    public FeatureObject()
    {
        objFtcAttr = new List<FeatureAttr>();
    }   
    public List<FeatureAttr> ftcAttr { get; set; }
} 

public class FeatureAttr {
    public string AttrKeyName;
    public string AttrDataType;
    public string AttrNumericRange;
    List<String> allValuesOfAttr = new List<String>();
    public void setValueOfAttr (string value) {
            this.allValuesOfAttr.Add(value);
    }
    public List<String> getValuesOfAttr() {
        return(this.allValuesOfAttr);
    }
}

PS

Add-Type -Path C:\projects\bin\FCObject.dll
$ftcObj = New-Object FeatureObject
$ftcAttr = New-Object FeatureAttr
$ftcObj = New-Object FeatureObject
$ftcObj.geometry = $geometry
$ftcObj.ftcAttr.Add($ftcAttr)

另外:我是否总是需要明确声明我的下层和上面的getter和setter?我不能像$ ftcObj.geometry = $ geometry ??

那样获取和设置数据
public string geometry
    {
        get { return geometry; }
        set { geometry = value; }
    }

public string geometry {get; set; }

请帮助!

1 个答案:

答案 0 :(得分:0)

我可能会修改FeatureObject来实例化默认列表:

public class FeatureObject 
{
    public FeatureObject()
    {
        ftcAttr = new List<FeatureAttr>();
    }
    public List<FeatureAttr> ftcAttr {get; set; }
} 

然后你就开始在PowerShell中添加内容了。

如果要在PowerShell中创建它,请使用以下语法:

$ftcObj = New-Object FeatureObject
$ftcObj.ftcAttr = New-Object 'Collections.Generic.List[FeatureAttr]'

您必须引用通用列表的类型字符串,并且必须使用FeatureAttr的完整的,名称空间限定的类型名称。

最后,如果您显式声明属性或使用C#的自动属性语法,则无关紧要。编译器将自动属性转换为显式的getter / setter。