我有一個使用 WebGL 和 c# 的 Unity 游戲。
我正在運行 Unity 2020.2.6f1,據我了解是使用 c# 7.3
我目前檢查空陣列或空陣列,如下所示:
ObjectType[] myObjectTypeList = FindObjectsOfType<ObjectType>();
if(myObjectTypeList != null && myObjectTypeList.Length > 0)
{
...
}
但我在 c# 7 中讀到,您可以縮短為:
if(!(myObjectTypeList?.Length != 0))
{
...
}
這是我在使用時可以在 Unity c# 腳本中執行的操作FindObjectsOfType嗎?
謝謝!
uj5u.com熱心網友回復:
在C#7 C# 8.0中,您可以使用is運算子,并且您的if陳述句可以是
if (myObjectTypeList is {Length: > 0}){
// [...]
}
這等于
if (myObjectTypeList != null && myObjectTypeList.Length > 0){
// [...]
}
編輯
這個答案是錯誤的。
根據微軟的檔案:
從 C# 8.0 開始,您可以使用屬性模式將運算式的屬性或欄位與嵌套模式匹配 [...]
此功能僅適用于 c#8.0 及更高版本。也就是說,這個答案仍然有效,因為Unity 版本 2020.2 使用 Roslyn Compiler with C# 8.0 Language Support。
uj5u.com熱心網友回復:
被?.稱為Null Conditional Operator. a?.b將決議為b,除非a是null,在這種情況下它決議為null。這個運算子實際上是自 C# 6.0 以來的新運算子。
uj5u.com熱心網友回復:
如果您可以忍受有關在 null 上呼叫擴展方法的警告,則應該可以:
public static class Extensions
{
public static bool NotNullHasItems<T> (this IEnumerable<T> collection)
{
if (collection == null)
{
return false;
}
return collection.Any();
}
}
為了測驗這一點,我使用了:
List<string> stuff = null;
var shouldBeFalse = stuff.NotNullHasItems();
stuff = new List<string>();
var shouldAlsoBeFalse = stuff.NotNullHasItems();
stuff.Add("test");
var shouldBeTrue = stuff.NotNullHasItems();
兩者都是真實shouldBeFalse的。shouldAlsoBeFalsefalseshouldBeTrue
您可能想要一個更好的名稱(也許顛倒邏輯并將其命名IsNullOrEmpty為匹配string.IsNullOrEmpty)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461609.html
上一篇:C#佇列-記憶體不足
下一篇:特定邊上垂線上的一點
