编辑:添加了使用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; }
请帮助!
答案 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。