如果数组元素不存在,是否有一种简单的方法来获取值“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)
^更喜欢单行表达
我正在尝试声明一个十进制数,如果 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)
你知道如何解决这个问题吗?
我正在使用 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) 我是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 建议添加此功能?有什么解决方法吗?
我可以在 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 值的参数。
我怎样才能通过选项或其他方式实现这一目标?
我在 2019 年 1 月创建了一个 Flutter 项目。我在 Dart 中阅读了一篇文章,并说它支持可空类型。
class c {
int? id;
}
Run Code Online (Sandbox Code Playgroud)
但我无法编译上述内容。它给出了一些错误消息,但与可空类型无关。似乎它不理解“?” 根本。
我可以知道我的代码中可能缺少什么吗?我需要升级我的 Dart 或 Flutter 吗?我查看了 pubspec.yaml,但找不到任何对 dart 的引用。
我遇到了一个意外的问题(或者这是预期的行为?)。以下代码未编译,并给出错误:
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) 一方面,我是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)
这并不可怕,但关于它的一些事情仍然困扰着我。我有一种感觉,?:如果有多个条件,模式可能会变得有点难以理解。有没有人对更好的模式有建议,或者这是我们现在能做的最好的吗?
文档Compare(T? x, T? y)说:
\n\n返回:
\n
\n一个有符号整数,表示 x 和 y 的相对值
\n小于零 \xe2\x80\x93 x 小于 y。
\n零 \xe2\x80\x93 x 等于 y。
\n大于零 \xe2\x80\x93 x 大于 y。
考虑这个例子:
\nusing 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}\nRun Code Online (Sandbox Code Playgroud)\nnull“小于”某个值也是如此。-2如果它返回一个不同的幻数(例如),或者抛出异常,或者其他什么,我不会感到惊讶。
正如预期的那样,并且 …
我有一个空列表,尝试 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)