什么是C#/ CLI的等效于C#的默认值(T)?

dka*_*man 15 .net generics default c++-cli

我正在使用一些C++/CLI代码(新语法)并尝试声明泛型类型,并希望将成员变量设置为默认值.

在C#中:

class Class<T>
{ 
    T member = default(T);
}
Run Code Online (Sandbox Code Playgroud)

CLI中的等价物是什么?

generic<typename T> public ref class Class 
{
public:
    Class() : member(default(T))  // <-- no worky
    {
    }    
private:
        T member;
};
Run Code Online (Sandbox Code Playgroud)

dka*_*man 11

有趣的是,语法使它看起来像这样:T().它确实需要添加一个复制构造函数.

generic<typename T> 
    public ref class Class 
{
public:
    Class() : member(T())  
    {
    } 

    Class(Class^ c)
    {
        member = c->member;
    }

private:
    T member;
};
Run Code Online (Sandbox Code Playgroud)

编辑 DOH这也有效(在C#land中已经存在了这么长时间我忘记了NULL和0在C++中是相同的,因此不需要不同的值和引用类型默认值):

generic<typename T> 
    public ref class Class 
{
public:
    Class() : member(0)  
    {
    } 

    Class(Class^ c)
    {
        member = c->member;
    }

private:
    T member;
};
Run Code Online (Sandbox Code Playgroud)

  • 你是对的T()和0是一个有效的空指针常量,但`member(0)`并不总是正确的:它要求T有一个带有int的ctor. (2认同)
  • 我相信它应该只是`Class():member()`; 不需要复制构造函数. (2认同)