我真的很喜欢C#中的条件运算符.它使我的生活更容易编写如下的逻辑:
public string FormattedFileName
{
get
{
return string.Format("{0}_{1}_{2}_{3}.xls",
DateTime.Now.Month.ToString().Length == 1
? "0" + DateTime.Now.Month.ToString()
: DateTime.Now.Month.ToString(),
DateTime.Now.Day.ToString().Length == 1
? "0" + DateTime.Now.Day.ToString()
: DateTime.Now.Day.ToString(),
DateTime.Now.Year.ToString(),
"DownLoaded_From_Clients");
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这意味着我失去了代码的可读性.无论如何,我只是好奇其他开发人员对这种编写代码的方法的看法.谢谢.我同样赞赏消极和积极的评论.
返回this.AllowChooseAny.Value?radioSpecific.Checked?UserManager.CurrentUser.IsClient?txtSubject.Text:subjectDropDownList.SelectedItem.Text:String.Empty:UserManager.CurrentUser.IsClient?txtSubject.Text:subjectDropDownList.SelectedItem.Text;
或者以不太复杂的形式:
return any ?
specified ?
isClient ? textbox : dropdown :
empty :
isClient ? textbox : dropdown;
Run Code Online (Sandbox Code Playgroud)
或以示意图形式:
|
any
/ \
specified isClient
/ \ / \
isClient empty textbox dropdown
/ \
textbox dropdown
Run Code Online (Sandbox Code Playgroud)
显然我在两个不同的级别上有一个重复的块.是否可以优化此代码以将它们分成一个?或类似的东西..
我有一个简单的条件,并希望用?:关键字实现它,但编译器不要让我.这是确切的样本
// in asp page decleration
<ajaxtoolkit:FilteredTextBoxExtender id="ftbeNumeric" runat="server" TargetControlID="textbox1" FilterType="Numbers" />
<asp:TextBox ID="textbox1" runat="server" />
// in code behind
decimal x = textbox1.Text != string.IsNullOrEmpty ? Convert.ToDecimal(textbox1.Text) : 0;
Run Code Online (Sandbox Code Playgroud)
我也试试这个
// in code behind
decimal x = Convert.ToDecimal(textbox1.Text) != 0 ? Convert.ToDecimal(textbox1.Text) : 0;
Run Code Online (Sandbox Code Playgroud)
这些样品的bith面临错误.
如何用?:关键字定义这个?并注意textbox.text`可能为null.
简单的问题(我认为):这些代码中的哪些代码在C#中执行得更快?
newSpeed = newSpeed > maxSpeed ? maxSpeed : newSpeed;
Run Code Online (Sandbox Code Playgroud)
要么
if (newSpeed > maxSpeed)
{
newSpeed = maxSpeed;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在int和*节点上使用条件运算符(?)(节点是自定义结构).这是我的代码,以及由此产生的错误.
节点:
struct node {
int num;
node *next;
};
Run Code Online (Sandbox Code Playgroud)
条件实施:
void PrintNodes(node *head_p) {
int done = 0;
while (!done) {
PrintNodeData(head_p);
// if (head_p->next==NULL) {
// done++;
// } else {
// head_p++;
// }
((head_p->next==NULL) ? done : head_p)++;
}
}
Run Code Online (Sandbox Code Playgroud)
我if...then...else在条件语句上面的注释中有相同的声明,我只想将其修剪为一行.
错误:
test.cc: In function ‘void PrintNodes(node*)’:
test.cc:28:36: error: operands to ?: have different types ‘int’ and ‘node*’
make: *** [all] Error 1
Run Code Online (Sandbox Code Playgroud) 为什么我不能在条件运算符中返回具有共同祖先的兄弟类型?
为什么C#不支持这个?
class Polygon
{
public int CountSides { get; set; }
}
class Rectangle : Polygon { }
class Circle : Polygon { }
class Program
{
static void Main(string[] args)
{
Polygon p = true ? new Circle() : new Rectangle();
}
}
Run Code Online (Sandbox Code Playgroud) 我在某处看到,一旦If语句达到True布尔值,Java就应该"短路".但是,我目前遇到以下代码中的空指针异常(我已经为此问题简化了):
currentFragment.setTag(HOME);
if( !currentFragment.getTag().equals(PROFILE) |
( currentFragment.getArguments() != null &
currentFragment.getArguments().getInt("authorId") != userId) ) { }
Run Code Online (Sandbox Code Playgroud)
Android开发人员会知道setTag()不是一个真正的方法,但在我的实际代码中,我通过错误记录确保了currentFragment.getTag()!= PROFILE.但是,当此代码运行时,它会导致零点异常
currentFragment.getArguments().getInt("authorId") != userId
Run Code Online (Sandbox Code Playgroud)
它应该在|之前的第一个条件下短路 (或)运营商.如果失败了,下一行应该确保getArguments()!= null,那么为什么它会一直到最终条件呢?可以解释这里发生的事情的内部运作.谢谢.
我有以下代码,
class Foo<K> {
public <T> T createK() {
return null;
}
public void foo() throws ClassNotFoundException {
K k = (1==1)?null:createK();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它没有编译.它使用条件运算符导致以下编译错误(Oracle Java 7):
类型不匹配:无法从Object转换为K.
当我重写foo()方法如下,
public void foo() throws ClassNotFoundException {
K k = null;
if (1==1)
k = null;
else
k = createK();
}
Run Code Online (Sandbox Code Playgroud)
然后编译好.这是怎么造成的,我该如何解决?
是否可以在AngularJS表达式的内联if语句中包含多个语句?例如,以下失败:
ng-change="someCondition() ? doA(); doB() : doC()"
ng-change="someCondition() ? doA(), doB() : doC()"
Run Code Online (Sandbox Code Playgroud)
这可以按如下方式完成:
ng-change="someCondition() ? doA() : doC(); someCondition() ? doB() : ''"
Run Code Online (Sandbox Code Playgroud)
但这很丑陋,两次调用someCondition(),并且在控制器中发出尖叫声.有没有办法让第一个例子起作用?
如何减少运营商的复杂性?我有条件问题.
Object someObject = getSomeObject();
boolean isNotInstanceOfA = !(someObject instanceof A);
boolean isNotInstanceOfB = !(someObject instanceof B);
boolean isNotInstanceOfC = !(someObject instanceof C);
boolean isNotInstanceOfABC = isNotInstanceOfA && isNotInstanceOfB && isNotInstanceOfC;
if (isNotInstanceOfABC && (container.getChildren(itemId) == null || container.getChildren(itemId).isEmpty())) {
return "something";
}
Run Code Online (Sandbox Code Playgroud) c# ×5
java ×3
.net ×2
if-statement ×2
angularjs ×1
asp.net ×1
c++ ×1
conditional ×1
generics ×1
inheritance ×1
oop ×1
pointers ×1