阵列像初始化类C#
可能是愚蠢的问题,但我想初始化我的对象的数组是这样的:阵列像初始化类C#
FooBar[] fooBars = new FooBars[]
{
{"Foo", "Bar"},
{"Foo", "Bar"}
};
其中FooBar的是:
public class FooBar
{
public string foo;
public string bar;
}
我试过继承CollectionBase并添加Add(字符串)方法或字符串[]运算符,但这些都不起作用:/
你可以欺骗一个有点给人类FooBar的隐式构造函数(需要的元组支持最新版本的C#):
public class FooBar
{
public string foo;
public string bar;
public static implicit operator FooBar((string, string) init)
{
return new FooBar{ foo = init.Item1, bar = init.Item2 };
}
}
然后,像这样的代码将工作:
var fooBars = new FooBar[]
{
("Foo1", "Bar1"),
("Foo2", "Bar2")
};
或
FooBar[] fooBars =
{
("Foo1", "Bar1"),
("Foo2", "Bar2")
};
然后:
foreach (var fooBar in fooBars)
Console.WriteLine($"foo = {fooBar.foo}, bar = {fooBar.bar} ");
这似乎相当接近你的目标是什么了(尽管有括号,而不是大括号)。
但通常您只需使用new FooBar("Foo", "Bar")
语法作为其他答案。
这有助于很多,但不是exacly我正在寻找,但看起来很酷;) – blackmaciek
@ blackmaciek请注意,它不是一个非常有效的解决方案,因为您将为每个对'FooBar'构造函数的调用构造一个临时元组,如果您使用普通的'new Foobar(...)'语法。 –
这是你在找什么? 我不明白你在问什么。
如果您愿意,您可以在此fiddle中玩一下。
public class FooBar
{
public FooBar(string foo, string bar)
{
this.foo = foo;
this.bar = bar;
}
public string foo;
public string bar;
}
public static void Main(String[] args)
{
FooBar[] fooBars = new FooBar[] {
new FooBar("Foo", "Bar"),
new FooBar("Foo", "Bar")
};
}
Ofc词典的工作原理是这样的: Dictionary dic = new Dictionary (){{“foo”,“bar”}}; –
blackmaciek
https://msdn.microsoft.com/en-us/library/83h9yskw(v=vs.110).aspx –
如果您已经转化了一个FooBars数组,那么您还需要使用FooBars的实例来填充它,所以你将不得不做'新的Foobar()',然后填写'foo'和'bar'属性。但更好的方法是将它们传递给FooBar构造函数。此外,如果您想使用字符串对,请考虑使用字典。 – pkanev