gpt4 book ai didi

c# - 如何从 C# 中具有相同类型的项目的数组返回对象?

转载 作者:行者123 更新时间:2023-11-30 15:20:25 24 4
gpt4 key购买 nike

我正在创建一个示例方法,其灵感来自 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();

感谢您的帮助,

比拉尔

最佳答案

你真的只有 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)];
}

关于c# - 如何从 C# 中具有相同类型的项目的数组返回对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40248985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com