Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ошибка cs0311 , помогите

Денис Иванов Ученик (107), на голосовании 3 недели назад
using System.Collections.Generic;
using UnityEngine.Events ;
using UnityEngine.Pool;

namespace UnityEngine.UI
{
/// <summary>
/// Wrapper class for managing layout rebuilding of CanvasElement.
/// </summary>
public class LayoutRebuilder : ICanvasElement
{
private RectTransform m_ToRebuild;
//There are a few of reasons we need to cache the Hash fromt he transform:
// - This is a ValueType (struct) and .Net calculates Hash from the Value Type fields.
// - The key of a Dictionary should have a constant Hash value.
// - It's possible for the Transform to get nulled from the Native side.
// We use this struct with the IndexedSet container, which uses a dictionary as part of it's implementation
// So this struct gets used as a key to a dictionary, so we need to guarantee a constant Hash value.
private int m_CachedHashFromTransform;

static ObjectPool<LayoutRebuilder> s_Rebuilders = new ObjectPool<LayoutRebuilder>(() => new LayoutRebuilder(), null, x => x.Clear());

private void Initialize(RectTransform controller)
{
m_ToRebuild = controller;
m_CachedHashFromTransform = controller.GetHashCode();
}

private void Clear()
{
m_ToRebuild = null;
m_CachedHashFromTransform = 0;
}
это маленькая часть когда здесь и ошибка если надо весь код то могу написать
вот ошибка
Library\PackageCache\com.unity.ugui\Runtime\UGUI\UI\Core\Layout\LayoutRebuilder.cs(21,44): error CS0311: The type 'UnityEngine.UI.LayoutRebuilder' cannot be used as type parameter 'T' in the generic type or method 'ObjectPool<T>'. There is no implicit reference conversion from 'UnityEngine.UI.LayoutRebuilder' to 'ObjectPoolEvents'.
Голосование за лучший ответ
Рустам Абдрашитов Мыслитель (9518) 1 месяц назад
Убедитесь, что ваш класс LayoutRebuilder не требует наследования от ObjectPoolEvents, если это не нужно для вашей логики.

Ошибка CS0311 возникает из-за того, что класс LayoutRebuilder не соответствует требованиям обобщенного типа ObjectPool<T>. В данном случае, ObjectPool<T> ожидает, что тип T будет производным от ObjectPoolEvents, но LayoutRebuilder не является его производным классом.
Чтобы исправить эту ошибку, вы можете изменить использование ObjectPool<LayoutRebuilder> на другой подход, например, создать свой собственный пул объектов без ограничений на типы. Вот пример
 static ObjectPool<LayoutRebuilder> s_Rebuilders = new ObjectPool<LayoutRebuilder>( 
() => new LayoutRebuilder(),
null,
x => x.Clear()
);
Похожие вопросы