标签: nullable

如果数组元素不存在则返回 null

如果数组元素不存在,是否有一种简单的方法来获取值“null”?

例如,下面的代码sArray有 3 个元素,前 3 个调用起作用SomeMethod(打印 true),但是第四个调用SomeMethod(sArray[3]);给了我一个IndexOutOfRangeException. 有没有办法让第四次调用SomeMethodprint 为 false?

    static void Main(string[] args)
    {
        int[] sArray = new int[]{1,2,3};
        SomeMethod(sArray[0]);
        SomeMethod(sArray[1]);
        SomeMethod(sArray[2]);
        SomeMethod(sArray[3]);
    }
    static void SomeMethod(int? s) => Console.WriteLine(s.HasValue);
Run Code Online (Sandbox Code Playgroud)

^更喜欢单行表达

c# arrays nullable .net-core

0
推荐指数
2
解决办法
3238
查看次数

指定的强制转换无效 - 十进制

我正在尝试声明一个十进制数,如果 dr["index"] 为空,它将采用 dr["index"] 的值或值为 null。

这是我的代码行:

Decimal number = (Decimal)(dr["index"] ?? 0);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

System.Invalid.CastException : 'Specified cast is not valid' 
Run Code Online (Sandbox Code Playgroud)

你知道如何解决这个问题吗?

c# nullable

0
推荐指数
1
解决办法
1047
查看次数

指定为非空的参数为空 - 在 Kotlin 中加载图像

我正在使用 Picassos Target 从 Internet 加载图像并从中生成调色板。当图像不再存在时,我会因 Logcat 中的错误而崩溃:

 java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter placeHolderDrawable
        at .ActivityThread.performLaunchActivity(ActivityThread.java:3260)
        at .ActivityThread.handleLaunchActivity(ActivityThread.java:3396)
        at .servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at .servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at .servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at .ActivityThread$H.handleMessage(ActivityThread.java:2009)
        at .Handler.dispatchMessage(Handler.java:107)
        at .Looper.loop(Looper.java:214)
        at .ActivityThread.main(ActivityThread.java:7319)
        at .reflect.Method.invoke(Native Method)
        at .os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at .os.ZygoteInit.main(ZygoteInit.java:934)
     Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter placeHolderDrawable
        at .LoadImage$onCreate$1.onPrepareLoad(Unknown Source:2)
        at com.squareup.picasso.RequestCreator.into(RequestCreator.java:559)
        at .LoadImage.onCreate(LoadImage.kt:154)
        **at .LoadImage.onCreate(LoadImage.kt:154)**
Run Code Online (Sandbox Code Playgroud)

好的,我明白发生了什么 - Picasso 加载图像,图像为空,因此应用程序崩溃。但是我怎样才能用一行代码来处理这个问题呢?

这是发生问题的部分,我为您标记了第 154 行:

    Picasso.get()
            .load(eventimgurl)
            **.into(object : com.squareup.picasso.Target {**
                override …
Run Code Online (Sandbox Code Playgroud)

android nullable illegalargumentexception kotlin picasso

0
推荐指数
1
解决办法
1044
查看次数

如何保护代码免于解构 Javascript 中的空值?

我是Javascript中解构和可选提议的忠实粉丝。

我不禁感到,在解构 null 或 undefined 值时,如果结果未定义,因为它在可选链中而不是抛出错误,那将非常有用。

例如:

const person = null
console.log(person?.age) // undefined
Run Code Online (Sandbox Code Playgroud)

然而:

const person = null
const { age } = person // runtime error
Run Code Online (Sandbox Code Playgroud)

它当然不会像这样工作,但是是否有一些 Babel 建议添加此功能?有什么解决方法吗?

javascript nullable destructuring

0
推荐指数
1
解决办法
477
查看次数

Scala 中的可空支持

我可以在 Scala 对象中有 Nullable 参数吗?

类似于 C# 中的 Nullable 和语法糖:

public int? Age {get; set;}
public string Name {get; set;}
public bool? isAdmin {get; set;}
Run Code Online (Sandbox Code Playgroud)

我可以创建 Scala 类,其中对象可以设置其中一些属性,而其他属性则不能吗?

我打算有多个构造函数用于不同的目的。我想确保空值意味着未设置该字段。

更新

例如我有以下案例类

case class Employee(age: Int, salary: Int, scaleNum : Int,
                            name: String, memberId: Int )
Run Code Online (Sandbox Code Playgroud)

我正在使用 GSON 序列化 JSON 中的类。

但是,在某些情况下,我不想为某些参数传递值,这样 GSON 序列化程序将只包含具有非 NULL 值的参数。

我怎样才能通过选项或其他方式实现这一目标?

scala nullable gson

0
推荐指数
1
解决办法
160
查看次数

为什么我不能在颤振中使用可空类型

我在 2019 年 1 月创建了一个 Flutter 项目。我在 Dart 中阅读了一篇文章,并说它支持可空类型。

class c {
  int? id;
}
Run Code Online (Sandbox Code Playgroud)

但我无法编译上述内容。它给出了一些错误消息,但与可空类型无关。似乎它不理解“?” 根本。

错误: 在此处输入图片说明

我可以知道我的代码中可能缺少什么吗?我需要升级我的 Dart 或 Flutter 吗?我查看了 pubspec.yaml,但找不到任何对 dart 的引用。

nullable dart flutter

0
推荐指数
1
解决办法
172
查看次数

为什么这个不能编译?无法从“X”转换?到“X”

我遇到了一个意外的问题(或者这是预期的行为?)。以下代码未编译,并给出错误:

CS1503 Argument 1: cannot convert from 'long?' to 'long'

public static void Add(long? ticks)
{
    if (ticks != null)
    {
        new DateTime(ticks);
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# nullable

0
推荐指数
1
解决办法
317
查看次数

在可空范式中使用“Try...”方法

一方面,我是Nullables 的忠实粉丝,我认为这是自 LINQ 以来实现 C# 代码流的最伟大的事情。然而,这种改造确实会导致一些怪异。我相信我们都经历过Try...Nullables存在的情况下使用方法。这没有多大意义。以下方法签名是可怕的:

    bool TryFindValue(Key key, Value? value);
Run Code Online (Sandbox Code Playgroud)

一个明显的问题是实现可能返回 true 和 out null。此外,编译器并没有真正很好地处理它,所以你需要使用!(即使你实际上不能保证它不是null),所以你也应该进行空检查(这就是使这种模式不工作)。好的,那该怎么办?嗯,这很明显。你做这个:

    Value? FindValue(Key key);
Run Code Online (Sandbox Code Playgroud)

好的。bool 和 value 都包含在一种类型中。但这让我经常做的其他事情有点尴尬。假设我之前有以下内容:

    if(boolValue && TryFindValue(key, out var value))
        DoSomethingWith(value);
    else
        DoSomethingElse();
Run Code Online (Sandbox Code Playgroud)

假设 TryFindValue() 相对昂贵;除非boolValue是真的,否则我不想这样做。我现在如何写得干净利落?也许这个?

Value? value = boolValue ? FindValue(key) : null;
if(value != null)
    DoSomethingWith(value);
else
    DoSomethingElse();
Run Code Online (Sandbox Code Playgroud)

这并不可怕,但关于它的一些事情仍然困扰着我。我有一种感觉,?:如果有多个条件,模式可能会变得有点难以理解。有没有人对更好的模式有建议,或者这是我们现在能做的最好的吗?

c# nullable

0
推荐指数
1
解决办法
46
查看次数

为什么默认比较器认为 null 小于某个值

文档Compare(T? x, T? y)说:

\n
\n

返回:
\n一个有符号整数,表示 x 和 y 的相对值
\n小于零 \xe2\x80\x93 x 小于 y。
\n零 \xe2\x80\x93 x 等于 y。
\n大于零 \xe2\x80\x93 x 大于 y。

\n
\n

考虑这个例子:

\n
using System;\nusing System.Collections.Generic;\n                    \npublic class Program\n{\n    public static void Main()\n    {\n        Console.WriteLine(Comparer<int?>.Default.Compare(null, 1)); // -1   ?huh?\n        Console.WriteLine(Comparer<int?>.Default.Compare(-1, 1));   // -1\n        Console.WriteLine(Comparer<int?>.Default.Compare(1, 1));    //  0\n        Console.WriteLine(Comparer<int?>.Default.Compare(2, 1));    //  1\n        \n        Console.WriteLine((int?)null < 1);                          // False\n        Console.WriteLine((int?)null == 1);                         // False\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

null“小于”某个值也是如此。-2如果它返回一个不同的幻数(例如),或者抛出异常,或者其他什么,我不会感到惊讶。

\n

正如预期的那样,并且 …

c# types nullable

0
推荐指数
1
解决办法
496
查看次数

C# 可空和 FirstOrDefault 失败

我有一个空列表,尝试 FirstOrDefault 在不同的编码风格中表现不同。试图理解其中的差异。下面的三个片段尝试做同样的事情。但ans3单独工作没有任何异常。ans2和ans3不是一样的吗?

        IList<int> list = null;

        var ans1 = list.FirstOrDefault(); //Fails

        var temp = list?.ToList();
        var ans2 = temp.FirstOrDefault(); //Fails

        var ans3 = list?.ToList().FirstOrDefault(); //Passes
        
Run Code Online (Sandbox Code Playgroud)

c# linq nullable

0
推荐指数
1
解决办法
354
查看次数