我已經寫了回傳物件的 void List<>。但它崩潰了:
StackOverflowException:請求的操作導致堆疊溢位。System.Collections.Generic.List'1[T].set_Capacity (System.Int32 value) (at <6073cf49ed704e958b8a66d540dea948>:0) System.Collections.Generic.List'1[T].EnsureCapacity (System.Int32 min) (at <6073cf49ed704e958b8a66d540dea948>:0) System.Collections.Generic.List'1[T].AddWithResize (T item) (在 <6073cf49ed704e958b8a66d540dea948>:0)
這是我的代碼:
public List<Object> MyObjects;
public List<Object> AllObjectsExcluding(string excludedObjectId)
{
List<Object> objects = new List<Object>();
foreach (Object object in MyObjects)
{
if (object.id != excludedObjectId)
{
objects.Add(object); //StackOverflowException
}
}
return objects;
}
public class Object
{
public string id;
}
uj5u.com熱心網友回復:
首先,一般不要Object用作您自己型別的名稱!
已經足夠令人困惑了System.Object,其中所有內容的隱式母型別c#和UnityEngine.Object,所有資產的母型別,如 Unity 中的參考。
此外還有一個型別別名object(== System.Object)
=> 您在這里向我們展示的代碼甚至根本無法編譯,因為object(以及任何其他內置關鍵字和型別別名)不允許作為變數名。
最后,正如評論中所提到的,您向我們展示的代碼(除了之前提到的編譯問題)不會產生該例外 => 它必須是您沒有向我們展示的其他東西。
對于您的用例,您最好只使用LinqWhere
using System.Linq;
...
return MyObjects.Where(obj => obj.id != excludedObjectId).ToList();
uj5u.com熱心網友回復:
在我的例子中,一些遞回函式也呼叫了示例函式。謝謝喬納斯!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/507088.html
下一篇:Javax.validation拋出InternerServerError500而不是BadRequest400
