我有一些C ++库。我还得到了C ++ / CLI包装器,以便在C#代码中调用来自该库的方法。
让我说我想在C#中使用这样的调用:
string date = MyWrapper.GetValue("SystemSettings", "BuildDate", null);
将调用C ++ / CLI上的下一个函数:
static String^ GetValue(String^ section, String^ key, String^ defaultValue)
我的问题:我得到了下一个ArgumentNullException:
值不能为null。\ r \ nParameter name:managedString。
所以......问题:我应该如何正确通过null
?
感谢。
答案 0 :(得分:9)
传递null的代码很好。问题是你的包装器代码需要检测null并处理它。该代码可能是在假设第三个参数永远不为空的情况下编写的。如果您希望允许null,则必须显式处理该条件:
static String^ GetValue(String^ section, String^ key, String^ defaultValue)
{
if (defaultValue == nullptr)
// special case handling
....
}
答案 1 :(得分:1)
Windows运行时存在类似的限制。请参阅this similar question详细答案。看起来你可能已经陷入了非常接近它的东西。
答案 2 :(得分:0)
也许你需要传递一个空字符串而不是null。例如
string date = MyWrapper.GetValue("SystemSettings", "BuildDate", "");