我看到到处都是如下结构:
int? myVar = null;
string test = myVar.HasValue ? myVar.Value.ToString() : string.Empty;
Run Code Online (Sandbox Code Playgroud)
为什么不简单地使用:
string test = myVar.ToString();
Run Code Online (Sandbox Code Playgroud)
那不完全一样吗?至少Reflector说:
public override string ToString()
{
if (!this.HasValue)
{
return "";
}
return this.value.ToString();
}
Run Code Online (Sandbox Code Playgroud)
那么,这是正确的(较短的版本)还是我错过了什么?
private string? typeOfContract
{
get { return (string?)ViewState["typeOfContract"]; }
set { ViewState["typeOfContract"] = value; }
}
Run Code Online (Sandbox Code Playgroud)
稍后在代码中我使用它如下:
typeOfContract = Request.QueryString["type"];
Run Code Online (Sandbox Code Playgroud)
我typeOfContract在行声明的声明中收到以下错误:
类型'string'必须是不可为空的值类型,以便在泛型类型或方法'System.Nullable <T>'中将其用作参数'T'
有任何想法吗?基本上,我想确保在执行操作之前"type"存在QueryString.
我开始学习可空类型并遇到以下行为.
在尝试nullable int时,我看到比较运算符给了我意想不到的结果.例如,在我的下面的代码中,我得到的输出是"两个和1相等".请注意,它也不会打印"null".
int? a = null;
int? b = 1;
if (a < b)
Console.WriteLine("{0} is bigger than {1}", b, a);
else if (a > b)
Console.WriteLine("{0} is bigger than {1}", a, b);
else
Console.WriteLine("both {0} and {1} are equal", a, b);
Run Code Online (Sandbox Code Playgroud)
我希望任何非负整数都大于null,我错过了什么吗?
解释为什么无法为int赋值null,例如
int? accom = (accomStr == "noval" ? null : Convert.ToInt32(accomStr));
Run Code Online (Sandbox Code Playgroud)
这段代码出了什么问题?
我可以看到@Nullable和@Nonnull注释可以在防止有用NullPointerException秒,但他们并不很远传播.
@Nonnull不为空并因此不执行空检查的危险.下面的代码会导致标有一个参数@Nonnull是null没有提出任何投诉.它会NullPointerException在运行时抛出.
public class Clazz {
public static void main(String[] args){
Clazz clazz = new Clazz();
// this line raises a complaint with the IDE (IntelliJ 11)
clazz.directPathToA(null);
// this line does not
clazz.indirectPathToA(null);
}
public void indirectPathToA(Integer y){
directPathToA(y);
}
public void directPathToA(@Nonnull Integer x){
x.toString(); // do stuff to x
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使这些注释更严格地执行和/或进一步传播?
java annotations nullable nullpointerexception code-standards
请看下面一行
<TextBox Text="{Binding Price}"/>
Run Code Online (Sandbox Code Playgroud)
上面的价格属性是Decimal?(可以为十进制).
我希望如果用户删除文本框的内容(即输入空字符串,它应该自动更新源为null(在VB中为Nothing).
关于如何做到'Xamly'的任何想法?
我想使用DateTime.TryParse方法将字符串的datetime值变为Nullable.但是,当我尝试这个:
DateTime? d;
bool success = DateTime.TryParse("some date text", out (DateTime)d);
Run Code Online (Sandbox Code Playgroud)
编译告诉我
'out'参数未被归类为变量
不知道我需要做什么.我也尝试过:
out (DateTime)d.Value
Run Code Online (Sandbox Code Playgroud)
这也不起作用.有任何想法吗?
我想用@Nullable 注释来消除NullPointerExceptions.我在网上找到了一些教程,我注意到这个注释来自包javax.annotation.Nullable; 但是当我导入它时会产生编译错误:无法找到符号