2009-12-23 80 views
0

如何把这段代码转换:C#代码重构?

MYCLASS ebt = new MYCLASS(); 
ebt.cbStruct = Marshal.SizeOf(ebt); 

到这一点:

MYCLASS ebt = new MYCLASS(cbStruct = Marshal.SizeOf('What comes here?')); 

回答

2

获取,而不是类型的大小:

MYCLASS ebt = new MYCLASS { cbStruct = Marshal.SizeOf(typeof(MYCLASS)) }; 

还要注意括号而非小括号使用初始化器语法。

+0

糟糕!在提出问题之前,我做了同样的事情,没有任何错误,肯定和它不工作,现在是。 – 2009-12-23 19:12:42

+0

你也猜对了,MYCLASS是一个结构体,所以所有的构造函数都是错误的。 +10更多。 – 2009-12-23 19:18:15

0

使用MYCLASS构造函数,一个cbStruct参数。

3

修改MYCLASS构造函数,

public MYCLASS() 
{ 
    cbStruct = Marshall.SizeOf(this); 
} 
+0

itowlson的例子的不同变化。 – Chris 2009-12-23 19:07:12

+0

只需要添加,只有当MYCLASS是一个类时才允许。许多互操作类型都是结构体,并且C#中不能指定结构的默认构造函数 - 它始终将所有字段初始化为0。 – itowlson 2009-12-23 19:08:21