질문의 짧은 버전 - 왜 이것을 할 수 없습니까? .NET 3.5로 제한됩니다.유형 배열을 일반 배열로 변환 하시겠습니까?
T[] genericArray;
// Obviously T should be float!
genericArray = new T[3]{ 1.0f, 2.0f, 0.0f };
// Can't do this either, why the hell not
genericArray = new float[3]{ 1.0f, 2.0f, 0.0f };
더 긴 버전 - 그건 중요하지 않지만
나는 여기 유니티 엔진으로 일하고 있어요. 무엇이 - 고정 된 Vector2 (2 개 부동)와 Vector3 (3 개 부동) 사이에 변환을 던지려는 중입니다. 제 일반 벡터 <> 클래스입니다. 유형을 일반 배열로 직접 형 변환 할 수 없습니다. T는 Vector<float>
로 Vector<T>
를 통해, float로서 정의 된 경우
using UnityEngine;
public struct Vector<T>
{
private readonly T[] _axes;
#region Constructors
public Vector(int axisCount)
{
this._axes = new T[axisCount];
}
public Vector(T x, T y)
{
this._axes = new T[2] { x, y };
}
public Vector(T x, T y, T z)
{
this._axes = new T[3]{x, y, z};
}
public Vector(Vector2 vector2)
{
// This doesn't work
this._axes = new T[2] { vector2.x, vector2.y };
}
public Vector(Vector3 vector3)
{
// Nor does this
this._axes = new T[3] { vector3.x, vector3.y, vector3.z };
}
#endregion
#region Properties
public T this[int i]
{
get { return _axes[i]; }
set { _axes[i] = value; }
}
public T X
{
get { return _axes[0];}
set { _axes[0] = value; }
}
public T Y
{
get { return _axes[1]; }
set { _axes[1] = value; }
}
public T Z
{
get
{
return this._axes.Length < 2 ? default(T) : _axes[2];
}
set
{
if (this._axes.Length < 2)
return;
_axes[2] = value;
}
}
#endregion
#region Type Converters
public static explicit operator Vector<T>(Vector2 vector2)
{
Vector<T> vector = new Vector<T>(vector2);
return vector;
}
public static explicit operator Vector<T>(Vector3 vector3)
{
Vector<T> vector = new Vector<T>(vector3);
return vector;
}
#endregion
}
수업이 완료되지 않았습니다. 일반 매개 변수가 표시되지 않습니다. 불완전한 코드는 코드가없는 것보다 나쁩니다. ;-) –
@Sky 코드가 완료되었지만 George가 HTML을 제대로 벗어나지 못했습니다 (''...). –
@Konrad & George. 그래, 알아 냈어 야 했어. 죄송합니다. –