【发布时间】:2020-04-16 13:15:28
【问题描述】:
我从 C# 开始,在编写一个在 C# 中同时接受 Vector2 和 Vector3 参数的方法时遇到问题。
泛型方法看起来不错,但我现在还不能让它工作。这是我尝试过的:
static void GetNoisePosition<T>(ref T position, float offset, float scale) where T : IEquatable<T>
{
position += position.GetType().one * (offset + 0.1f);
position *= scale;
}
我真的不想拥有 2 个版本的 GetNoisePosition,每个版本都采用矢量类型,因为我不想复制逻辑,而且很难创建另一个可以共享其中一些逻辑的方法。
所以,问题是我想在类型 T 的类上调用 one 方法,但它告诉我不能。
我可以通过position 实例访问该类并调用它吗?
【问题讨论】:
-
position.GetType().GetProperty("one").GetValue(null) -
“我真的不想拥有两个版本的 GetNoisePosition” - 为什么?如果它们有一些共同点,那么该共同点可能是基类或接口的一部分。否则,您将处理 2 种不同的类型并访问它们完全不同的属性。方法重载才是王道。
-
或者,只使用
Vector3 position,因为Vector2可以隐式转换为Vector3 -
没关系,我刚刚注意到这是一个
ref参数 -
position.GetType().GetProperty("one").GetValue(null)本身很好,但是我不能在上面使用*方法。
标签: c# overloading strong-typing generic-method