Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 原语、泛型和重载-接口方法返回类型可以定义为一组结构和原语吗?_C# - Fatal编程技术网

C# 原语、泛型和重载-接口方法返回类型可以定义为一组结构和原语吗?

C# 原语、泛型和重载-接口方法返回类型可以定义为一组结构和原语吗?,c#,C#,我有此接口定义的组件: public interface IAgentObservation<T> { T GetObervation(); } 但这感觉远非理想 你能告诉我们向量存储在哪里吗?我不明白您现在如何将不同的类型存储在一个列表中。AddVectorObsForType(对象测试)。泛型版本没有:如果编译时已知t,只需让编译器选择适当的AddVectorObs()重载即可。通过“一些结构和原语集”,您是说要返回联合,还是?如果可以的

我有此接口定义的组件:

    public interface IAgentObservation<T>
    {
        T GetObervation();
    }

但这感觉远非理想

你能告诉我们向量存储在哪里吗?我不明白您现在如何将不同的类型存储在一个列表中。
AddVectorObsForType(对象测试)
。泛型版本没有:如果编译时已知
t
,只需让编译器选择适当的
AddVectorObs()
重载即可。通过“一些结构和原语集”,您是说要返回联合,还是?如果可以的话,你能展示一些伪代码来说明你想用它做什么吗?每种类型都被转换成若干浮点数并添加到一个
列表中(由机器学习代理使用)。我可以让我的接口方法返回一个float数组并直接添加它们,但我更愿意重用已经存在的object->float[]转换方法
protected void AddVectorObs(bool observation);
protected void AddVectorObs(Quaternion observation);
protected void AddVectorObs(bool observation);
protected void AddVectorObs(IEnumerable<float> observation);
private void AddVectorObsForType<T>(T test)
        {
            switch (test)
            {
                case float f:
                    AddVectorObs(f);
                    break;
                case int i:
                    AddVectorObs(i);
                    break;
                case Vector3 v3:
                    AddVectorObs(v3);
                    break;
                case Vector2 v2:
                    AddVectorObs(v2);
                    break;
                case IEnumerable<float> ef:
                    AddVectorObs(ef);
                    break;
                case Quaternion q:
                    AddVectorObs(q);
                    break;
                case bool b:
                    AddVectorObs(b);
                    break;
                case ValueTuple<int,int> t:
                    AddVectorObs(t.Item1, t.Item2);
                    break;
                default:
                    throw new Exception("Unsupported observation vector type: " + typeof(T));