Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串数组合并为单个字符串_C#_Linq - Fatal编程技术网

C# 将字符串数组合并为单个字符串

C# 将字符串数组合并为单个字符串,c#,linq,C#,Linq,我关于系统的问题。C中的随机命令 我在MVC 4项目中有一个查询,如: public JsonResult GetQuestions() { ... var rnd = new Random(); var selectedData = data.Select(y => new { ..., qAnswers = ((y.qA1 != null ? "ab" : "") + (y.q

我关于系统的问题。C中的随机命令

我在MVC 4项目中有一个查询,如:

public JsonResult GetQuestions() 
{
    ...
    var rnd = new Random();
    var selectedData = data.Select(y => new 
    { 
        ...,
        qAnswers = ((y.qA1 != null ? "ab" : "") + 
                   (y.qA2 != null ? "cd" : "") +
                   (y.qA3 != null ? "ef" : "") +
                   (y.qA4 != null ? "gh" : "") +
                   (y.qA5 != null ? "ij" : "")).OrderBy(item => rnd.Next())
    });

    return Json(selectedData, JsonRequestBehavior.AllowGet); 
}
作为查询的结果,我希望看到如下内容:

var qAnswers = String.Concat(new string[] { (y.qA1 != null ? "ab" : "" ),
               (y.qA2 != null ? "cd" : ""),
               (y.qA3 != null ? "ef" : ""),
               (y.qA4 != null ? "gh" : ""),
               (y.qA5 != null ? "ij" : "")}
                 .Where(item=>!string.IsNullOrEmpty(item))
                 .OrderBy(item=>rnd.Next())); 
ijcdefabgh

但结果是:

["i","a","c","d","g","h","e","f","b","j"]

你知道我的错在哪里吗?或者如何修复它?

您必须创建一个字符串数组,以便将对作为字符串,然后将其洗牌,类似于:

var qAnswers = String.Concat(new string[] { (y.qA1 != null ? "ab" : "" ),
               (y.qA2 != null ? "cd" : ""),
               (y.qA3 != null ? "ef" : ""),
               (y.qA4 != null ? "gh" : ""),
               (y.qA5 != null ? "ij" : "")}
                 .Where(item=>!string.IsNullOrEmpty(item))
                 .OrderBy(item=>rnd.Next())); 

在发布任何答案之前,对我的评论进行扩展:

问题:您正在通过使用+将一组字符串相加来构建字符串。字符串是字符的集合,因此当您按OrderBy排序时,实际上是在洗牌字符。通过C交互式控制台:

ab+cd+ef+gh+ij.OrderByx=>Guid.NewGuid >OrderedEnumerable{c',i',e',d',a',f',h',b',g',j'} 解决方案:相反,您需要定义要洗牌的字符串集合:

var ans=新列表; 阿达布; ans.Addcd; 答:增编; 阿德格; 安·阿迪杰; qAnswers=String.Join,ans.OrderByx=>Guid.NewGuid >cdijefghab
你的意思是你想要一个字符串,但是你有一个字符串数组?这个问题有两个部分。首先,所需的输出与当前输出不同,这是因为它是随机排列列的。你需要移除它。其次,你得到的是字符串数组,需要使用string.JoinIt连接这些字符串以获得所需的输出。如果这是一个数组,则会有所帮助。这与你如何使用Random无关,因此我更新了你的标题。但作为警告,您不希望每个请求都有一个新的随机实例-请使用一个静态实例。@shA.t:千万不要按guid排序。guid保证是唯一的;它们是随机的是一个实现细节。guid提供程序被允许生成顺序随机guid,如果它这样做了,那么您的洗牌将按排序顺序洗牌。这太好了!我的答案是,在符号正确之前,我知道你为什么使用。Whereitem=>!string.IsNullOrEmptyitem命令?还有,这意味着什么?因为当您向数组添加字符串时,如果一个y.qAx为null,您将添加一个空字符串。所以。Whereitem=>!IsNullOrEmptyitem选择数组中除空字符串以外的所有字符串,因为您不希望它们出现在最终结果中。可能没有必要使用String.Concat,但我认为如果您想要数组@EmirhanÖ,它会更干净ZKAN@EmirhanÖZKAN因此,如果您最终只需要字符串,您可以删除Where子句,结果将是sameNever使用guid作为随机性源。它们保证是唯一的,而不是随机的。@EricLippert我们以前有过这样的讨论:。对于快速洗牌,在Random和NewGuid之间的选择应该是任意的,并且在当前的windows操作系统上,NewGuid实际上使用CSPRNG而不是Random。如果随机性是应用程序的关键功能,那么随机性或Guid.NewGuid都不合适。