簡體   English   中英

為什么我們可以放一個GetComponent的結果<Camera>在 Behavior 數組中,但不能執行 GetComponent<Camera> (出行為數組[X])?

[英]Why can we put the result of a GetComponent<Camera> in a Behaviour array but can't do GetComponent<Camera>(out behaviourArray[X])?

我想知道為什么這項工作:

Behaviour _BehaviourArray = new Behaviour[1];
BehaviourArray[0] = GetComponent<Camera>();

但不是這個:

Behaviour _BehaviourArray = new Behaviour[1];
TryGetComponent<Camera>(out BehaviourArray[0]);

如果兩個 Camera 組件都存在,這應該(在我看來)給出相同的結果。

如果有人能回答我,將不勝感激。

謝謝。

實際上,如果您的代碼中的類型正確,您可以這樣做:

public Camera[] _BehaviourArray;

private void Awake()
{
    _BehaviourArray = new Camera[1];
    TryGetComponent<Camera>(out _BehaviourArray[0]);

    Debug.Log(_BehaviourArray[0]);
}

=>

在此處輸入圖片說明

C# 中的索引器運算符是一個屬性(或至少像一個屬性),因此不能像任何其他屬性一樣作為out參數傳遞給方法。

屬性(或索引器)是內部 getter 和 setter 方法的語法糖,並將其作為參數傳遞給另一個方法,就像編寫以下內容:

TryGetComponent(out BehaviourArray.SetValue(0, ...));

你能做的就是寫

Behaviour _BehaviourArray = new Behaviour[1];
TryGetComponent<Camera>(out Camera camera);
_BehaviourArray[0] = camera;

您甚至可以將其包裝在一個方法中:

void GetComponentToArrayIndex<TComponent, TSpecificComponent>(TComponent[] array, int index) where TComponent : Component where TSpecificComponent : TComponent
{
    TryGetComponent<TSpecificComponent>(out TSpecificComponent component);
    array[index] = component;
}

並像這樣使用它:

Behaviour _BehaviourArray = new Behaviour[1];
GetComponentToArrayIndex<Camera>(_BehaviourArray, 0);

這些只是建議和未經測試的代碼,但這就是我在你的情況下會嘗試的。

更多信息:
索引器
輸出參數修飾符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM