隐式转换为'System.IDisposable'错误

Cod*_*ect 12 c# kinect

这就是我想要做的

private KinectAudioSource CreateAudioSource()
{
    var source = KinectSensor.KinectSensors[0].AudioSource;
    source.NoiseSuppression = _isNoiseSuppressionOn;
    source.AutomaticGainControlEnabled = _isAutomaticGainOn;
    return source;
}
private object lockObj = new object();
private void RecordKinectAudio()
{
    lock (lockObj)
    {
        using (var source = CreateAudioSource())
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

'using'语句给出了一个错误,指出 - "'Microsoft.Kinect.KinectAudioSource':在using语句中使用的类型必须可以隐式转换为'System.IDisposable'".如何消除此错误,这是什么意思?

Vis*_*hal 18

我参加聚会很晚,但我应该说:

reference to Entity Framework如果在using语句中使用context时遇到此错误,则必须添加一个.


小智 14

你可以这样创建:

public class HelloTest : IDisposable
{
    void IDisposable.Dispose()
    {

    }

    public void GetData()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

之后你就可以创建像这样的对象了

using (HelloTest Ht = new HelloTest())
        {
            Ht.GetData();
        }
Run Code Online (Sandbox Code Playgroud)

我希望上面的例子有用


Tra*_*son 5

创建新项目时,我曾遇到过类似的问题,但我忘记通过Nuget软件包管理器安装ENTITY FRAMEWORK。抱歉,如果这与kinect不相关,但是当我在VS中寻找错误时,这就是Google带我去的地方。


Adi*_*dil 0

该类KinectAudioSource应该实现IDisposable接口以便与 using 块一起使用。未实现 Idisposable 的类无法在 using 语句中实例化。

通常,当您使用 IDisposable obj 时,通常,当您使用 IDisposable 对象时,您应该在 using 语句中声明并实例化它。using 语句以正确的方式调用对象上的 Dispose 方法,并且(当您如前面所示使用它时)它还会导致对象本身在调用 Dispose 时超出范围。在using块内,对象是只读的,不能修改或重新分配,MSDN