字符串 [] 数组中的 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”或“c​​onditional-inline”标签吗?)

【问题讨论】:

根据您的代码示例,在该数组初始化语句中,msettingvalue 将始终为真。 FWIW,也许 DictionaryKeyValuePair[](或 ...)更适合设置对? 使用字典,你把自己编码到一个角落,根本没有理由这样做。 【参考方案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();

但是...从您的数组的外观来看,您最好使用不同的结构来存储这些东西。这是您想要的关联数组。您可以使用TupleDictionary 以更易于处理且更准确地反映语义的方式对设置进行建模。

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# 内联条件的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer Plus基础知识部分快速通关

如何拆分字符串 C# 并忽略字符串中的不完整单词

C# 怎么把数组中的数据添加到datagridview中

Swift内联条件?

正则表达式与 C# 中的 OR 条件最长匹配

c#中的字符串拆分返回一个空数组