我正在使用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
我无法理解。有什么建议吗?
答案 0 :(得分:1)
您看到virtual
属性,因为默认情况下会添加此属性。要删除它,您必须明确标记它&#34; final&#34;:
newProperty.Attributes = MemberAttributes.Final;
如果您想知道T?
符号:这只是语法糖,等于Nullable<T>
。我不相信您可以使用?
创建它,因为您基本上使用CodeDom在较低级别工作。