我遇到了以下问题。
考虑以下简单属性。
[AttributeUsage(AttributeTargets.Property)]
public class CombinationsAttribute : Attribute
{
public object[] PossibleValues { get; private set; }
public CombinationsAttribute(params object[] values)
{
this.PossibleValues = values;
}
}
以下是属性使用示例 - 只是一些具有一些虚拟属性的类,进入属性的值数组始终是属性类型。
public class MyClass
{
[Combinations(1, 2, 3, 4, 5)]
public int IntProperty1 { get; set; }
[Combinations(10, 15, 20, 25, 30)]
public int IntProperty2 { get; set; }
[Combinations("X", "Y", "Z")]
public string StringProperty { get; set; }
}
我想获取所有组合的所有实例(本例中为 5 * 5 * 3)。我怎样才能编写尽可能少的代码(LINQ 受青睐)?
编辑:我不知道类(MyClass) - 有许多具有公共属性的类具有 CombinationsAttribute,我需要为其计算所有可能的组合。. 这些类总是有无参数的构造函数。
预期结果示例(用于可视化的伪 c#):
List<MyClass> Combinations = GetCombinationMagicFunction(typeof(MyClass));
List[0] = MyClass { IntProperty1 = 1, IntProperty2 = 10, StringProperty = "X" }
List[1] = MyClass { IntProperty1 = 1, IntProperty2 = 10, StringProperty = "Y" }
List[2] = MyClass { IntProperty1 = 1, IntProperty2 = 10, StringProperty = "Z" }
List[2] = MyClass { IntProperty1 = 1, IntProperty2 = 15, StringProperty = "X" }
...
List[74] = MyClass { IntProperty1 = 5, IntProperty2 = 30, StringProperty = "Z" }