我正在创建一个受ruby的示例方法启发的示例方法,该方法从数组中返回一个随机对象。
我的方法运行正常,我可以这样称呼它:
questions.Sample<Question>();
目前函数的源代码如下:
public static class ArrayUtils
{
public static T Sample<T>(this IList list)
{
var type = list[0].GetType();
return (T) list[UnityEngine.Random.Range(0, list.Count)];
}
}
所以问题是,我希望它只返回数组中对象的类型,而不是包含我想要返回的类型。
例如,如果我们有一个Question []类型的数组,它应该返回一个Question类型的对象。
基本上,在代码中,我想改变这个:
questions.Sample<Question>();
对此:
questions.Sample();
感谢您的帮助,
比拉尔
答案 0 :(得分:4)
你真的只有3个选择。
选项1 - 如果您真的不关心返回的类型,则可以执行此操作。结果将始终返回为object
。
public static object Sample(this IList list)
{
return list[UnityEngine.Random.Range(0, list.Count)];
}
如果您在列表中使用值类型,则在将结果作为对象返回时将发生装箱。感谢您指出@ rory.ap
选项2 - 如果您使用的是通用IList<T>
,那么您可以执行此操作,在这种情况下,通用标识符将从正在使用的参数中复制。
public static T Sample<T>(this IList<T> list)
{
return list[UnityEngine.Random.Range(0, list.Count)];
}
选项3 - 这是您已经拥有的,您必须指定泛型类型。
public static T Sample<T>(this IList list)
{
return (T)list[UnityEngine.Random.Range(0, list.Count)];
}