gpt4 book ai didi

c# - 对于 'char' 变量,“int”从不等于 null

转载 作者:行者123 更新时间:2023-11-30 13:46:18 25 4
gpt4 key购买 nike

有人能回答我这个问题——为什么我会收到这个警告“表达式的结果总是‘假’,因为‘int’类型的值永远不等于‘int’类型的‘null’?”

这是代码

    private char classLetter;
public char ClassLetter
{
get { return classLetter; }
set
{
if (classLetter == null)
{
classLetter = value;
RaisePropertyChanged("ClassLetter");
}
else throw new ArgumentOutOfRangeException();
}
}

如果我使用此代码,则不会出现警告

    private char classLetter;
public char ClassLetter
{
get { return classLetter; }
set
{
if (classLetter.ToString() == null)
{
classLetter = value;
RaisePropertyChanged("ClassLetter");
}
else throw new ArgumentOutOfRangeException();
}
}

简而言之,我的问题是这个

如何为 char 变量发出 int 警告?

编辑:'char' 应该包含任何拉丁字母或西里尔字母,不允许有特殊符号和数字。应该如何过滤?

最佳答案

在第一种情况下,classLetterchar 类型,它永远不可能是null,因为它是一个值类型;它需要是 char? 类型。因此,正如编译器所说,比较 classLetter == null 没有意义。

在第二种情况下,假设 classLetter'x'。在执行 classLetter.ToString() 时,您会得到 "x",可以将其与 null 进行比较,因为它现在是引用类型。但同样,这不是您想要的,因为 classLetter.ToString() 永远不会是 null

如果你想要只允许设置一次值,你可以这样做:

private char? classLetter = null; // make it nullable
public char ClassLetter
{
get {
if(classLetter == null) { // if we don't have a value yet
// do something, like throwing an exception
}else{ // if we do have a value already
return classLetter.Value; // here we return char, not char?
}
}
set
{
if (classLetter == null) {
classLetter = value;
RaisePropertyChanged("ClassLetter");
}
else throw new ArgumentOutOfRangeException();
}
}

关于c# - 对于 'char' 变量,“int”从不等于 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22306783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com