使用CodeDom生成可空类型属性

时间:2014-08-10 22:45:44

标签: c# properties nullable codedom

我正在使用CodeDom生成一些C#代码,基本上是尝试从现有类复制所有属性。代码非常简单:

//type is a Type
foreach(PropertyInfo p in type.GetProperties())
 {
    Type eType = p.PropertyType;
    AddProperty(eType, p.Name);
    // ...
 }

void AddProperty(Type propType, string name)
{
    CodeMemberProperty newProperty = new CodeMemberProperty();
    newProperty.Type = new CodeTypeReference(propType);         
    newProperty.Name = name;
    targetClass.Members.Add(newProperty);
}

这适用于字符串,但对于可以为空的原始类型(如decimal?int?),在生成的代码中我会得到以下内容:

public virtual System.Nullable<decimal> MyNullableDecimal

而不是

public decimal? MyNullableDecimal

我无法理解。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您看到virtual属性,因为默认情况下会添加此属性。要删除它,您必须明确标记它&#34; final&#34;:

newProperty.Attributes = MemberAttributes.Final;

如果您想知道T?符号:这只是语法糖,等于Nullable<T>。我不相信您可以使用?创建它,因为您基本上使用CodeDom在较低级别工作。