C#7引入了一个名为patterns的新功能,您可以将其与Is-Expression或Switch案例一起使用,如下所示:
string str = null;
switch(str){
case string x:
Console.WriteLine("string " + x);
break;
default:
Console.WriteLine("default");
break;
}
Run Code Online (Sandbox Code Playgroud)
并且你会期望它会进入#1的情况,因为它是相同的类型,但它没有.
哪三个在这三个中更好?
string myString = "";
String.IsNullOrEmpty(myString);
vs
string myString = "";
if(myString.Length > 0 || myString != null)
vs
string myString = "";
if (m.Length > 0 | m != null)
Run Code Online (Sandbox Code Playgroud)
前者更清楚,但这些之间有任何性能差异吗?如果字符串从不为空,如果从文本框中取出,可能是空的但不是空的,该怎么办?
在下面的代码行中,string x当clInitializer.AVOptions = null值为:时,我最终成为实际字符串"null" :
string x = JsonConvert.SerializeObject(clInitializer.AVOptions, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
Run Code Online (Sandbox Code Playgroud)
如实际的单词"null"而不是null值或者也许{}.我不确定这是预期的行为.有谁知道如何让它不返回"null"这个词,或者我对如何JsonConvert运作有一些根本的误解.先感谢您.
我在PowerShell ISE和VS Code中尝试了这个代码,结果相同.没有断点,输出是EMPTY,但是在行中有断点"NULL",输出是NULL(如预期的那样).为什么?
function demo {
param(
[string] $value = [NullString]::Value
)
if ($null -eq $value) {
"NULL"
} elseif ($value -eq '') {
"EMPTY"
} else {
"$value"
}
}
demo
Run Code Online (Sandbox Code Playgroud)
我现在知道,当你对参数使用类型修饰符[string]时,PowerShell总是将非字符串值(例如$ null或[NullString] :: Value)转换为(空)字符串.好吧,我可以忍受这一点,但是如果调试在这种情况下如此奇怪,那么很难自己解决这个问题.
为什么函数在将其作为字符串printf分配给它时返回 6 而不是 0 ,尽管它什么也没打印?NULL
int main(void)
{
int x;
x = printf("%s", NULL);
printf ("\n%d", x);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
(null)
6
Run Code Online (Sandbox Code Playgroud) null-string ×5
c# ×3
breakpoints ×1
c ×1
c#-7.0 ×1
debugging ×1
json ×1
json.net ×1
null ×1
powershell ×1
printf ×1
string ×1