我有一個使用 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
的。shouldAlsoBeFalse
false
shouldBeTrue
您可能想要一個更好的名稱(也許顛倒邏輯并將其命名IsNullOrEmpty
為匹配string.IsNullOrEmpty
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461609.html
上一篇:C#佇列-記憶體不足
下一篇:返回列表