将调用函数中的引用变量设置为null的通用方法

时间:2016-06-17 18:03:53

标签: c# com com-interop

我正在编写一个实用程序方法来干净地释放对COM对象的引用。

The folder named "customMaps" does not countain a modinfo.json file.
Exception in thread "main"
The folder named "launcher" does not countain a modinfo.json file.
The folder named "modtest" does not countain a modinfo.json file.
java.lang.NullPointerException at com.azias.awbe.tests.ModLoadingTest.main(ModLoadingTest.java:26)

我想这样称呼这个方法:

public class ComUtils {
    public static void ReleaseObj(ref object comObj)
    {
        if (comObj != null)
        {
            Marshal.FinalReleaseComObject(comObj);
            comObj = null;
        }
    }
}

我收到一个说

的编译器错误
  

无法从ref CommandData转换为ref对象

将CommandData强制转换为对象将失去泛型方法的目的,该方法必须在释放后将引用变量设置为null。

有解决方案吗? 我正在使用VS 2005,.NET 2.0

感谢。

2 个答案:

答案 0 :(得分:0)

您正在寻找泛型:

public static void ReleaseObj<T>(ref T comObj) where T : class
{
    if (comObj != null)
    {
        Marshal.FinalReleaseComObject(comObj);
        comObj = null;
    }
}

答案 1 :(得分:0)

您的问题明确询问“通用方法以获取对象参数[...]。”强调我的。

您没有通用方法。你有一个非通用的方法。如果要接受参数,其中该参数是的任何类型,则通过通用方法来接受对象 。如果你将方法设为通用的,它就可以工作。