有没有办法将类“成员”作为一流值传递?

public class Bike {
    public Color BikeColour { get; set; }
    public bool  IsGirlsBike { get; set; }
}

然后我想引用字段名称,而没有任何对象的概念。

我想我想要的是类似枚举的东西:
public enum BikeFields {BikeColour, IsGirlsBike};

但没有明确定义它。

有没有办法在 C# 中做到这一点?

编辑:为如此含糊道歉;我希望能够将类成员称为一流的东西(几乎就像绑定(bind)类型)。
Set<Bike:T> whichFieldsHaveBeenDrawn = new Set<Bike:T>();

Bike:T 是未定义的,我希望下图能清楚地说明这种新类型的工作原理。
whichFieldsHaveBeenDrawn.Include(Bike.BikeColour);

var remainingFields = Set.Subtract(Bike.GetAllFields(), whichFieldsHaveBeenDrawn);

Bike b = new Bike();
foreach (var field in remainingFields) { Draw(field, b); }

我想我可以通过反射来做到这一点,但我希望它们在编译时合格......

最佳答案

您不能在一个类中同时使用静态类型的 Enum,因为它们是在同一步骤中编译的。所以你需要两个步骤,第一个是拥有类,然后是生成相应的 Enum。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .分两步实现这一目标的一种方法是使用 t4 模板,如下所示:

1. 创建一个类库(假设称为 ClassLibrary)。这将包含您的自行车类(class)。

2. 在控制台应用程序(或您可能需要的任何其他类型的项目)中添加一个 t4 文本模板,如下所示:

<#@ template debug="true" hostspecific="false" language="C#" #>
<#@ assembly name="$(TargetDir)\ClassLibrary.dll" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="ClassLibrary" #>
<#@ output extension=".generated.cs" #>

namespace SO_31801914
{

<#
    var classes = new Type[] { typeof(ClassLibrary.Bike) };

    foreach (var cls in classes)
    {
#>
    public enum <#=cls.Name#>Enum
    {
<#      var props = cls.GetProperties();
        for (int i = 0 ; i < props.Length; i++)
        {
            var prop = props[i];
            bool skipComma = false;
            if (i == props.Length - 1)
            {
                skipComma = true;
            }
#>
            <#=prop.Name#><#=skipComma ? string.Empty : ","#>
<#
        }
#>
    }
<#
    }
#>
}

结果将是:
namespace SO_31801914
{

    public enum BikeEnum
    {
        BikeColour,
        IsGirlsBike
    }
}

构建 ClassLibrary 然后右键单击模板并单击“运行自定义工具”。在 TemplateName.generated.cs 中,您将获得上述结果。

关于c# - 在 C# 中将类成员称为枚举,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31801914/

10-10 05:55