我需要在编译时将我的类中的所有属性连接起来构建一个字符串。我见过类似的问题,但他们都在处理运行时场景。基本上,我有一千个属性,宁愿不再手工列出它们。我知道使用反射来使用typeof(X).getProperties(...),但是在运行时使用反射我不会有任何性能损失。有没有办法让我遍历我的类中的所有属性来创建我所有属性的字符串?
Class1 : SomeInterface
{
int1;
int2;
...
int1000;
string stringOfAllProperties;
public getAllPropertiesAsString()
{
return stringOfAllProperties = int1+int2+int3...;
}
}
正如其他人所提到的,如果你有一千个属性,你可能会遇到设计问题。解决这个设计问题将是我的第一选择,但如果这不是一个选择......
Visual Studio通过T4 templates支持编译时(或准确地说:保存时)代码生成,即,您可以执行以下操作:
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
class MyClass
{
<# var properties = new string [] {"int1", "int2", "int3", ...}; #>
<# foreach (string property in properties) { #>
private int <#= propertyName #>;
<# } #>
public string getAllPropertiesAsString()
{
return ""
<# foreach (string property in properties) { #>
+ <#= propertyName #>;
<# } #>
}
}
请注意,您必须在Visual Studio 2017安装过程中安装“Visual Studio扩展开发”工作负载。
我认为只有反思会帮助你。你可以做的是引入字典,其中键将是类型,值将是字符串连接结果。该词典将在您的应用程序中用作单例。因此,您将仅为每种类型计算一次字符串,从而几乎完全消除性能损失。