在 C# 中展开
Splatting in C#
在 PowerShell 中,您可以创建一个哈希表,并使用 @
将此哈希表添加到您的函数中,这在 PowerShell 中是 splatting。
$dict = @{param1 = 'test'; param2 = 12}
Get-Info @dict
能否将字典作为参数集合传递给构造函数或方法?
如果您想在字典中支持多个类型值,类似于您的 PowerShell 哈希 Table,您可以在此处创建 Dictionary<string, object>
:
var dict1 = new Dictionary<string, object>
{
{"param1", "test"},
{"param2", 12},
}
然后可以将其传递给构造函数:
private Dictionary<string, object> _dict;
public MyConstructor(Dictionary<string, object> dict)
{
_dict = dict
}
object
类型就是.NET中定义的System.Object
class类型,所有类型都继承自它。您可以在 PowerShell 中使用 $dict.GetType().BaseType.FullName
检查这个,这会给您 System.Object
。
但是,如上所示使用 object
是危险的,因为它不提供类型安全并且需要您在 object
之间进行强制转换。这也称为 Boxing and Unboxing。如果可以的话最好在这里使用强类型,或者重新考虑你的设计。
考虑到以上几点,我们可以在这里使用简单的 class 而不是强类型属性:
public class MyClass {
public string Param1 { get; set; }
public int Param2 { get; set; }
}
那么你可以像这样初始化它:
var myObject = new MyClass
{
Param1 = "test1",
Param2 = 12
};
并传递给您的构造函数:
private MyClass _myObject;
public MyConstructor(MyClass myObject)
{
_myObject = myObject;
}
在 PowerShell 中,您可以创建一个哈希表,并使用 @
将此哈希表添加到您的函数中,这在 PowerShell 中是 splatting。
$dict = @{param1 = 'test'; param2 = 12}
Get-Info @dict
能否将字典作为参数集合传递给构造函数或方法?
如果您想在字典中支持多个类型值,类似于您的 PowerShell 哈希 Table,您可以在此处创建 Dictionary<string, object>
:
var dict1 = new Dictionary<string, object>
{
{"param1", "test"},
{"param2", 12},
}
然后可以将其传递给构造函数:
private Dictionary<string, object> _dict;
public MyConstructor(Dictionary<string, object> dict)
{
_dict = dict
}
object
类型就是.NET中定义的System.Object
class类型,所有类型都继承自它。您可以在 PowerShell 中使用 $dict.GetType().BaseType.FullName
检查这个,这会给您 System.Object
。
但是,如上所示使用 object
是危险的,因为它不提供类型安全并且需要您在 object
之间进行强制转换。这也称为 Boxing and Unboxing。如果可以的话最好在这里使用强类型,或者重新考虑你的设计。
考虑到以上几点,我们可以在这里使用简单的 class 而不是强类型属性:
public class MyClass {
public string Param1 { get; set; }
public int Param2 { get; set; }
}
那么你可以像这样初始化它:
var myObject = new MyClass
{
Param1 = "test1",
Param2 = 12
};
并传递给您的构造函数:
private MyClass _myObject;
public MyConstructor(MyClass myObject)
{
_myObject = myObject;
}