Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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,roleList是包含角色的字符串类型列表 List<string> designationlistForQuery = new List<string>(); roleList.ForEach(r => { !r.Equals(shortDesignation) ? designationlistForQuery.Add(r) : delegate{}; }); List designationlistForQuery=

roleList是包含角色的字符串类型列表

List<string> designationlistForQuery = new List<string>();
  roleList.ForEach(r =>
       {
  !r.Equals(shortDesignation) ?   designationlistForQuery.Add(r) : delegate{};


      });
List designationlistForQuery=new List();
roleList.ForEach(r=>
{
!r.Equals(shortDesignation)?designationlistForQuery.Add(r):委托{};
});
但编译器告诉我:“void”和“匿名方法”之间没有隐式转换
如何解决此问题,请有人帮帮我。

使用简单的
foreach
运算符:

foreach(var role in roleList)
  if (role.Equals(shortDesignation))
      designationlistForQuery.Add(role);


在这里使用(这是它的名字,不是三元运算符)是没有意义的。您正在对每个项目执行操作,而不是返回值;条件运算符用于返回值,因此将其与无效操作数一起使用毫无意义。

?:
与不返回值的方法一起使用是很奇怪的,但如果确实需要,请将其包装成lambda,返回假值,如:

Func<int> action = condition ?
    ()=> { VoidMethod(); return 42;} :
    (Func<int>)(()=>42); 
Func action=条件?
()=>{VoidMethod();返回42;}:
(Func)(()=>42);

注意:在这种情况下,您至少需要将其转换为具体类型,如
(Func)
,因为C#无法用2个lambda来确定好的通用类型。

看起来这是您想要的,但这是一种糟糕的语法:

roleList.ForEach(r =>
    {
       (!r.Equals(shortDesignation) ? (Action) (() => designationlistForQuery.Add(r)) : (Action) (() => { }))();
    }
);
如果您想要简洁美观,这里有一个选项:

designationlistForQuery.AddRange(roleList.Where(x => !x.Equals(shortDesignation)));

还有十几种其他的编写方法,有些方法比其他方法更清晰,但我肯定会避免你的委托方法。

你使用的是什么
delegate{}
?你想实现什么?这个代码毫无意义…delegate{}用于返回void您可能是指
delegate()
?@user1427614您不能将三元运算符与
void
一起使用。故事的结尾我可以这样做,我知道,但我想使用三元运算符。你能告诉我怎么做吗please@user1427614除非你把你的意图解释清楚,否则我不能。因此,
designationlistForQuery.Add
返回
void
delegate{}
没有意义,那么三元运算符就不是选项。foreach是您实际应该用来执行
designationlistForQuery的。在每个与您的条件匹配的角色上添加
。为什么?谁在乎它是不是三元的?三元运算只是一种速记。我打算在这种情况下练习三元运算。我已经用你已经说过的方法解决过很多次了。但是我不能帮我解决这个问题。如果你能给出一个解决方案的话。@user1427614如果你想学,那么你确实学到了一些有用的东西:三元表在这种情况下是不合适的!非常感谢。我给你一个+1。@user1427614,请不要在实际代码中使用它。。。这是你想做的最丑陋的方式。
designationlistForQuery.AddRange(roleList.Where(x => !x.Equals(shortDesignation)));