c# - 将一个字符串拆分成一个唯一的列表——重构它

标签 c# string refactoring

好吧,这看起来很丑 :) 重构这段代码的好方法是什么?

Users 是在屏幕上输入的数据,对于此示例,我们希望在 _someDTOObject.Users

中得到不同的结果
string[] userNames = Users.Split(new char[] { ',' });
string tempUserStr = "";
foreach (string user in userNames)
{
    tempUserStr += user.Trim().ToUpper() + ",";
}

userNames = tempUserStr.Split(new char[] { ',' });
var uniqueUsers = userNames.Distinct().ToList();

foreach (string user in uniqueUsers)
{
    if (!string.IsNullOrEmpty(user))
    {
        _someDTOObject.Users += user + ",";
    }   
}

最佳答案

看起来您可能想要这样的东西:

_someDTOObject.Users = string.Join(",", Users.Split(',')
                                             .Select(x => x.Trim().ToUpper())
                                             .Distinct());

...但我不清楚您为什么要通过拆分/加入/拆分开始...

注意:如果您使用的是 .NET 3.5,则需要在 Distinct 之后调用额外的 ToArray。你不需要在 .NET 4 上,因为 string.Join 重载集已经增加。

(如 StriplingWarrior 的回答所述,这不会有尾随逗号。您想要尾随逗号吗?)

关于c# - 将一个字符串拆分成一个唯一的列表——重构它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9085195/

相关文章:

c# - 无法更改 visual studio 中异常的前景色

javascript - 使用函数和循环拼接字符串值并存储为数组

javascript - 如何使用 jQuery 过滤具有多个选择组的结果?

ruby - 寻找下一个最大的整数

c# - 最高效的数据存储

c# - 如何为 JObject 创建唯一的哈希码?

c# - 从代码调用的存储过程超时,从 SSMS 执行正常

regex - 在 bash 中匹配具有一定数量的唯一字符的字符串

string - 在 ActionScript 3.0 中是否可以获取变量名并将其转换为字符串?

C99 : cast double to struct?