1

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

我在我的 PowerShell 代码中使用了 C# 中的两个对象。我想做一个FeatureObject,设置它的变量;然后制作 FeatureAttributes 并将其添加到 FeatureObject 中的列表中。我可以设置和获取字符串、整数等。但我无法将 FeatureAttribute 添加到 FeatureObject 的列表中。

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);
    }
}

附言

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; }

请帮忙!

4

1 回答 1

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。

于 2012-06-13T15:08:12.153 回答