C#三元运算符?:高级点的用法

初级三元运算符用法:

p=bool?A:B

当bool=true,p=表达式A,当bool=false,p=表达式B。

那么当你遇到?:?:时,不要楞,三元运算符也是可以嵌套的。

用AForge.net时,有代码如下:

var population = new Population(populationSize,
                new PermutationChromosome(citiesCount), 
                fitnessFunction,
                (selectionMethod==0)?(ISelectionMethod)new EliteSelection():
                (selectionMethod==1)?(ISelectionMethod)new RankSelection():
                (ISelectionMethod)new RouletteWheelSelection()
                );

当看到,(selectionMethod==0)?(ISelectionMethod)new EliteSelection():                 (selectionMethod==1)?(ISelectionMethod)new RankSelection():                 (ISelectionMethod)new RouletteWheelSelection()

时,直接楞了,发觉,三元运算符似乎也可以嵌套。上面代码的作用是,根据selectionMethod的取值,选择需要的算法。

            /**              * 0:EliteSelection算法              * 1:RankSelection算法              * 其他:RouletteWheelSelection算法              */

这样的话,嵌套后的理解就方便了。

网上也有如下例子:

            Test t = new Test();
            if (t.str == "1")
                p = "11";
            else if (t.str == "2")
                p = "22";
            else if (t.str == "3")
                p = "33";

那么用三元运算符嵌套就是:

p = t.str == "1" ? "11":((t.str == "2") ? "22":"33");

因为运算符的优先级限制,也可以写成如下方式:

 p=t.str == "1"?"11":t.str == "2"?"22":t.str == "3"?"33":"";

换行一下,就是

p = t.str == "1" ? "11" :
      t.str == "2" ? "22" : 
      t.str == "3" ? "33" : 
      "";

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏desperate633

LintCode 比较字符串题目分析代码

比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母

561
来自专栏java学习

Java每日一练(2017/8/8)

本期题目: 作业要求: 1、写一个函数,给你一个字符串 倒序输出 必须我输入abcdefg 控制台输入 gfedcba 2、将this is a test ...

3669
来自专栏文武兼修ing——机器学习与IC设计

栈的应用中缀表达式转换为后缀表达式后缀表达式的计算

中缀表达式转换为后缀表达式 后缀表达式 做数学运算时,经常使用的是中缀表达式,即“操作数 运算符 操作数”。在计算机处理的时候更习惯后缀表达式,即“操作数 操作...

5197
来自专栏desperate633

LintCode 最长公共子序列题目分析代码

典型的动态规划问题 dp[i][[j]:表示前i个和前j个字符最大LCS 当A[i] = B[i]的时候: 那么显然dp[i][j] = dp[i-1][...

932
来自专栏机器学习从入门到成神

字符串面试题(四)— 判断一个字符串是否为另外一个字符串旋转之后的字符串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

1381
来自专栏尾尾部落

[剑指offer] 数字在排序数组中出现的次数

正常的思路就是二分查找了,我们用递归的方法实现了查找k第一次出现的下标,用循环的方法实现了查找k最后一次出现的下标。 除此之外,还有另一种奇妙的思路,因为da...

641
来自专栏小狼的世界

Javascript设计模式学习(三)更多的高级样式

if (hid != null && hid != undefined & hid != "") {

892
来自专栏Golang语言社区

Go语言的fmt包中文教程

Fmt包 import "fmt" 简介 ▾ Package fmt包含有格式化I/O函数,类似于C语言的printf和scanf。格式字符串的规则来源于C但更...

4037
来自专栏java学习

java每日一练(2017/8/7)

本期题目: (单选题) 1、如果子类要调用父类的构造函数,则通过super()调用来实现。 A 正确 B 错误 ---- (单选题) 2、ArrayList和...

2726
来自专栏Golang语言社区

Goalng下的反射模块reflect学习使用

注意:我们上面的示例是使用值类型进行进行反射构造的。如果是指针类型的话,我们需要使用reflect.Struct字段进行判断接口类型的Kind()方法

1653

扫码关注云+社区

领取腾讯云代金券