相关疑难解决方法(0)

要三元还是不三元?

我个人是三元运算符的拥护者:()?:; 我确实意识到它有它的位置,但我遇到了许多完全反对使用它的程序员,而且有些人经常使用它.

你有什么感受?你看到了什么有趣的代码?

multilingual ternary-operator conditional-operator

180
推荐指数
17
解决办法
4万
查看次数

操作方法:在C#中实现短路反向三元运算符?有关系吗?

假设您正在使用三元运算符或空合并运算符或嵌套的if-else语句来选择对象的赋值.现在假设在条件语句中,您对昂贵或易失性操作进行了评估,要求将结果放入临时变量中,捕获其状态,以便可以对其进行比较,然后进行可能的分配.

一个语言(如C#)如何实现一个新的逻辑运算符来处理这种情况?应该是?在C#中是否存在处理此案例的现有方法?其他语言?

例如,当我们假设我们正在寻找直接比较时,已经克服了一些降低三元或零合并算子的冗长度的情况.请参阅使用Null Coalescing运算符的唯一方法,特别是关于如何扩展运算符的使用以支持的讨论String.IsNullOrEmpty(string).注意Jon Skeet如何使用PartialComparerfrom MiscUtil,将0s 重新格式化为nulls,

为什么这可能是必要的?那么,看看我们如何为没有任何快捷方式的复杂对象编写比较方法(引用的讨论中的示例):

public static int Compare( Person p1, Person p2 )
{
    return ( (result = Compare( p1.Age, p2.Age )) != 0 ) ? result
        : ( (result = Compare( p1.Name, p2.Name )) != 0 ) ? result
        : Compare( p1.Salary, p2.Salary );
}
Run Code Online (Sandbox Code Playgroud)

Jon Skeet写了一个新的比较来回避平等案例.这允许通过编写一个返回null的新特定方法来扩展表达式,允许我们使用null合并运算符:

return PartialComparer.Compare(p1.Age, p2.Age)
    ?? PartialComparer.Compare(p1.Name, p2.Name)
    ?? PartialComparer.Compare(p1.Salary, p2.Salary)
    ?? 0;
Run Code Online (Sandbox Code Playgroud)

空合并运算符更具可读性,因为它有两个边,而不是三个边.布尔条件子句分为一个方法,在这种情况下返回null表达式必须继续.

如果我们可以更容易地将条件置于线上,那么上面的表达式会是什么样的?获取 …

c# language-features language-design

3
推荐指数
1
解决办法
1766
查看次数

方法调用中的C#null检查链

我想下面的方法调用链.

void DoSomething()
{
    ObjectA a = CreateA();
    if (a != null)
    {
        a.Foo();
    }
}

ObjectA CreateA()
{
    ObjectB b = CreateB();
    if (b != null)
    {    
        ObjectA a = b.ToA();
        return a;
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

如果方法调用深度变深,则空检查将更加重叠.对此有什么好的解决方案吗?

改性

我改变了示例代码.它无法解决我将CreateA更改为构造函数的问题.问题是只有不必要的空检查链接重叠.

void SetImage()
{
    UISprite image = GetSprite();
    if (image  != null)
    {
        image.spriteName = "hat";
    }
}

UISprite GetSprite()
{
    UISprite image = GetComponent<UISprite>();
    if (image  != null)
    {   
        image.width = 100;
        image.height = 100;
        return image;
    }
    return …
Run Code Online (Sandbox Code Playgroud)

c# null-check

3
推荐指数
1
解决办法
1654
查看次数

Swift中的可选链接或三元表达式?

是否有更高效,可读或更现代的方式来编写以下内容?

let currentColor:UIColor = view.backgroundColor != nil 
  ? view.backgroundColor! // forced unwrapping
  : UIColor.whiteColor() // fallback value
Run Code Online (Sandbox Code Playgroud)

我不介意在这里使用三元运算符,但感觉我应该使用Swift if let currentColor = view.backgroundColor语法.我只是不确定如何指定默认值.

optional-variables uicolor swift

2
推荐指数
1
解决办法
2212
查看次数