Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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# 4.0 C中的类型转换错误#_C# 4.0_Types_Casting - Fatal编程技术网

C# 4.0 C中的类型转换错误#

C# 4.0 C中的类型转换错误#,c#-4.0,types,casting,C# 4.0,Types,Casting,我正在尝试编写一个模拟不同频率信号的类。我希望该类将我正在测试的对象类型作为参数,以便测试该调用类中的方法。当我尝试将强制转换myObject类型为myType时,出现了一个错误。显然我做得不对。我省略了本课程中许多多余的代码,以便集中讨论我问题的上下文 public MaxFinderTestChannel(TestSignals signal, Object ob) { myType = ob.GetType(); myObjec

我正在尝试编写一个模拟不同频率信号的类。我希望该类将我正在测试的对象类型作为参数,以便测试该调用类中的方法。当我尝试将强制转换myObject类型为myType时,出现了一个错误。显然我做得不对。我省略了本课程中许多多余的代码,以便集中讨论我问题的上下文

           public MaxFinderTestChannel(TestSignals signal, Object ob)
    {
        myType = ob.GetType();
        myObject =  ob as myType; 

        switch (signal)
        {
            case TestSignals.Linear:
                {
                    constant = 1;
                    for (double dd = 0.0; dd <= 5 * Math.PI; dd += .001)
                    {
                        x = dd;
                        values.Add(x);
                        y = x + constant;
                        values.Add(y);
                    }
                }
                break;
            case TestSignals.NegativeSine:
                {
                    constant = -1;
                    for (double dd = 0.0; dd <= 5 * Math.PI; dd += .001)
                    {
                        x = dd;
                        values.Add(x);
                        y = Math.Sin(25 * x) + constant;
                        values.Add(y);
                    }
                }
                break;
            case TestSignals.Parabola:
                {
                    constant = 2;
                    for (double dd = (-Math.PI); dd <= Math.PI; dd += .1)
                    {
                        x = dd;
                        values.Add(x);
                        y = Math.Pow(x, 2) + constant;
                        values.Add(y);
                    }
                }
                break;
            case TestSignals.Sine:
                {
                    constant = 1;
                    for (double dd = 0.0; dd <= 5 * Math.PI; dd += .001)
                    {
                        x = dd;
                        values.Add(x);
                        y = Math.Sin(25 * x) + constant;
                        values.Add(y);
                    }
                }
                break;
            default:
                throw new Exception("Invalid signal type:" + this.Name.ToString());
        }
        pulseTrain = values.ToArray();
    }


    public virtual bool EnumDataPoints(bool eventsOnly, double startTime, double duration, Collection<ISampleProcessor> sampleProcessors)
    {
            for (double time = timestamp; !breakloop && time < endtime; time += .001)
            {
                time = Math.Round(time, 4);
                if (time == timestamp)
                {
                    if (myObject.Compute(time, ref value) == false) { breakloop = true; }
                    timestamp = Math.Round(pulseTrain[index], 4);
                    if (index < pulseTrain.Length - 1) { index++; }
                    value = Math.Round(pulseTrain[index], 4);
                    if (index < pulseTrain.Length - 1) { index++; }
                }
            }
        return !breakloop;
    }
公共MaxFinderTestChannel(TestSignals信号,对象ob) { myType=ob.GetType(); myObject=ob作为myType; 开关(信号) { 案例测试信号。线性: { 常数=1;
对于(双dd=0.0;dd为什么不使用通用方法?:

public MaxFinderTestChannel<T>(TestSignals signal, T ob) where T : ITheInterface 
{
     myObject =  ob ;
    ...
公共MaxFinderTestChannel(测试信号,T ob),其中T:ITheInterface
{
myObject=ob;
...

i接口是定义Compute()的接口方法

我很感激。我知道泛型是一种方法,但作为一名JAVA开发人员,我不太确定该怎么做。实际上还有一个问题,即使泛型也无法解决:如果作为参数传递的对象在运行时之前是未知的,那么在这种情况下,您必须(在运行时)动态地传递对象的类型告诉我是否是这样的情况实际上这起了作用,但我理解你的观点。由于隐式转换的潜在错误,我不得不限制接口的范围。出于测试用例的目的,这就是解决方案。再次感谢。@david_jr如果有帮助,你可能应该接受答案。问题必须标记为已解决。