字符串 [] 数组中的 C# 内联条件
Posted
技术标签:
【中文标题】字符串 [] 数组中的 C# 内联条件【英文标题】:C# inline conditional in string[] array 【发布时间】:2011-12-08 23:03:26 【问题描述】:如何在 C# 中为 string[] 数组执行以下内联条件。基于一个参数,我想包含一组字符串……或者不包含。这个问题是this one on ***的后续问题。
//Does not compile
bool msettingvalue=false;
string[] settings;
if(msettingvalue)
settings = new string[]
"setting1","1",
"setting2","apple",
((msettingvalue==true) ? "msetting","true" :);
如果 msettingvalue 为真,我想包含两个字符串 "msetting","true" :否则没有字符串。
编辑1 它不一定是键值对...如果要(或不)添加 5 个字符串会怎样...我认为它不会那么棘手。
(另外......有足够代表的人可以制作“inline-conditional”或“conditional-inline”标签吗?)
【问题讨论】:
根据您的代码示例,在该数组初始化语句中,msettingvalue 将始终为真。 FWIW,也许Dictionary
或 KeyValuePair[]
(或 ...)更适合设置对?
使用字典,你把自己编码到一个角落,根本没有理由这样做。
【参考方案1】:
settings = new string[]"setting1","1", "setting2","apple"
.Concat(msettingvalue ? new string[] "msetting","true" : new string[0]);
.ToArray()
【讨论】:
@pst 它只与给定要求一样丑陋。如果我要定义它,我绝对不会使用字符串数组来存储键/值对。可能是Dictionary<key,value>
,在这种情况下,您可以将给定键的值设置为 null。【参考方案2】:
使用通用的List<String>
bool msettingvalue=false;
string[] settings;
var s = new List<String>();
s.AddRange("setting1","1","setting2","apple");
if(msettingvalue)
s.AddRange("msetting","true");
settings = s.ToArray();
但是...从您的数组的外观来看,您最好使用不同的结构来存储这些东西。这是您想要的关联数组。您可以使用Tuple
或Dictionary
以更易于处理且更准确地反映语义的方式对设置进行建模。
bool msettingvalue=false;
var settings = new Dictionary<String,String>();
settings.Add("setting1","1");
settings.Add("setting2","value2");
if(msettingvalue)
settings.Add("msetting","true");
...最后两行甚至可以。
settings.Add("msetting",msettingvalue.ToString());
【讨论】:
我没有看到问题中提到的。还是不要。 我认为这个答案不尊重问题标题中使用的“内联”一词...以上是关于字符串 [] 数组中的 C# 内联条件的主要内容,如果未能解决你的问题,请参考以下文章