标签: null-coalescing-operator

null合并操作顺序

我从这个方法得到了奇怪的结果:

public static double YFromDepth(double Depth, double? StartDepth, double? PrintScale)
{               
    return (Depth - StartDepth ?? Globals.StartDepth) * PrintScale ?? Constants.YPixelsPerUnit ;
}
Run Code Online (Sandbox Code Playgroud)

当我将null传递给StartDepth时,合并失败,因为正在评估"Depth - StartDepth",首先将StartDepth转换为默认值0(降级?),而不是首先查看它是否为null并替换为Globals.相反,StartDepth.

这是一件众所周知的事吗?我能够通过添加括号来完成这项工作,但我真的不希望事情以这种方式工作.

.net c# null null-coalescing-operator

4
推荐指数
1
解决办法
1426
查看次数

右侧的三元/空合并运算符和赋值表达式?

在C#中尝试使用三元和空合并运算符时,我发现可以在表达式的右侧使用赋值,例如,这是一个有效的C#代码:

int? a = null;
int? b = null;
int? c = a ?? (b = 12);
int? d = a == 12 ? a : (b = 15);
Run Code Online (Sandbox Code Playgroud)

奇怪的是,不仅表达式右侧的赋值被评估到它自己的右侧(意味着这里的第三行被评估12而不是类似的东西b = 12 => void),但这个赋值也有效地工作,所以在一个语句中分配了两个变量.也可以使用任何可用变量在此赋值的右侧使用任何可计算表达式.

这种行为在我看来很奇怪.我记得 在C++中遇到麻烦if (a = 2) 而不是if (a == 2)比较,C++总是被评估true,这是从Basic/Haskell切换到C++之后的常见错误.

它是一个记录的功能吗?它有什么名字吗?

c# ternary-operator null-coalescing-operator

4
推荐指数
1
解决办法
1307
查看次数

空结合运算符

我有以下代码:

decimal? a = 2m;
decimal? b = 2m;
decimal c = a ?? 1m * b ?? 1m;
Run Code Online (Sandbox Code Playgroud)

由于双方ab已填写,我希望c给我的结果4.

但是,我得到的结果是2,在这种情况下b取为1而不是2.

有谁知道这种行为背后的原因是什么?

c# null-coalescing-operator

4
推荐指数
1
解决办法
240
查看次数

将空参数发送到Sql Server

我有一个SqlCommand对象,我用来更新数据库表,但它没有正确解释我的空值.

这是SQL:

UPDATE dbo.tbl 
SET param1 = @param1, 
param2 = @param2,
param3 = @param3,
param4 = @param4, 
param5 = @param5, 
param6 = @param6, 
param7 = @param7, 
param8 = @param8, 
param9 = @param9, 
param10 = @param10 
WHERE param11 = @param11
Run Code Online (Sandbox Code Playgroud)

我尝试过像这样可以为空的空合并参数,但我没有取得任何成功.除非另有说明,否则所有参数均为字符串

command.Parameters.AddWithValue("@param1", param1 ?? DBNull.Value);
command.Parameters.AddWithValue("@param2", param2 ?? DBNull.Value);
command.Parameters.AddWithValue("@param3", param3 ?? DBNull.Value);
command.Parameters.AddWithValue("@param4", param4 ?? DBNull.Value);
command.Parameters.AddWithValue("@param5", param5 ?? DBNull.Value);
// param6 is nullable type DateTime?
command.Parameters.AddWithValue("@param6", param6 ?? DBNull.Value); 
command.Parameters.AddWithValue("@param7", param7 ?? DBNull.Value);
// param8 is nullable …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server null-coalescing-operator null-coalescing

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

为什么Nil合并运算符右关联?

它不应该是左联想吗?

我觉得 let a = b ?? c ?? d 被分组像 let a = (b ?? c) ?? d let a = b ?? (c ?? d)

但它被宣布为右联盟.我误解或错过了什么吗?

operators null-coalescing-operator associativity custom-operator swift

4
推荐指数
1
解决办法
237
查看次数

Null合并算子与铸造

我升级到PHP 7并开始使用null coalesce运算符来转换像

$email = isset($_SESSION['email']) ? $_SESSION['email'] : '';
Run Code Online (Sandbox Code Playgroud)

$email = $_SESSION['email'] ?? '';
Run Code Online (Sandbox Code Playgroud)

但如果我也在施法,我无法弄清楚如何做到这一点.例如,旧的陈述

$id = isset($_GET['id']) ? (int) $_GET['id'] : 0;
Run Code Online (Sandbox Code Playgroud)

我会想到像

$id = (int) $_GET['id'] ?? 0;
Run Code Online (Sandbox Code Playgroud)

应该工作,但它似乎没有在某种意义上,如果$_GET['id']没有设置,$id解决,0但我收到通知

注意:未定义的索引:第2行的test.php中的id

php null-coalescing-operator php-7

4
推荐指数
1
解决办法
821
查看次数

C#coalesce operator

为什么以下代码返回false?

public static void Main()
{
    bool? someCondition = true;
    bool someConditionOverride = false;


    bool? result = someCondition ?? someConditionOverride ? false : (bool?)null;

    Console.WriteLine(result);
}
Run Code Online (Sandbox Code Playgroud)

我表示结果将是true,因为someCondition不是null??操作员将返回true.然而,首先计算右操作数,然后忽略左边部分.

添加括号可以解决这个问题:

bool? result = someCondition ?? (someConditionOverride ? false : (bool?)null)
Run Code Online (Sandbox Code Playgroud)

结果将是true.但是我仍然很好奇为什么在第一个例子中忽略了左侧部分.

c# null-coalescing-operator

4
推荐指数
1
解决办法
664
查看次数

也许合并运算符

我想知道如何定义一个运算符/如果一个运算符已经存在于Haskell中,它允许选择第一个Maybe不是的类型,Nothing如果它们都没有,则返回一些默认值.基本上是这样的:

let x = a ?? b ?? c ?? 1
Run Code Online (Sandbox Code Playgroud)

(??)运营商在哪里,a, b, c都是Maybe各种类型.我期望这个代码返回的第一个值是Just或者1如果所有的a, b, c都是Nothing.

我基本上希望复制与您在C#其他语言中找到的空合并运算符相同的功能.

这个问题说明了如何在F#中实现它(F#中的Null Coalescing Operator?),而且非常hacky.有没有办法在Haskell中干净利落地完成它,如果不是,那么最接近它的是什么?

null haskell null-coalescing-operator maybe

4
推荐指数
1
解决办法
230
查看次数

我如何滥用null运算符?这是否正确评估为“ null”?

我试图在Unity中的C#脚本中使用null-coalescing运算符,我的项目Scripting Runtime设置为.NET 4.x,因此它应该可以正常工作。

问题是,即使LEFT操作数的计算结果为null,也不会正确返回RIGHT操作数。

这是一个示例语句,当左侧Operand返回null时,该语句不起作用

m_meshFilter = ( GetMeshFilter() ?? AddMeshFilter() );
Run Code Online (Sandbox Code Playgroud)

这是SAME确切的语句,除了它显式地将null传递给null-coalescing运算符(运行时可正常运行

m_meshFilter = ( GetMeshFilter() == null ? null : GetMeshFilter() ) ?? AddMeshFilter();
Run Code Online (Sandbox Code Playgroud)

这是一个简短的脚本,可以直接在Unity中轻松测试问题。

using UnityEngine;

public class DoubleQuestionTest : MonoBehaviour
{
    public GameObject myGo;

    public MeshFilter m_meshFilter = null;

    [ContextMenu( "Test1 Null Coalescing Operator" )]
    void Test1()
    {
        m_meshFilter = ( GetMeshFilter() ?? AddMeshFilter() );

        if ( m_meshFilter == null )
        {
            Debug.Log( "m_meshFilter was null, trying Alternate" );
            m_meshFilter = ( …
Run Code Online (Sandbox Code Playgroud)

c# null-coalescing-operator unity-game-engine

4
推荐指数
1
解决办法
223
查看次数

如何在Haxe中使用合并运算符?

正如我在问题中提到的

如何在Haxe中使用合并运算符?

haxe operators coalescing null-coalescing-operator

4
推荐指数
1
解决办法
92
查看次数