属性中的不同/唯一值

时间:2016-01-10 16:15:37

标签: msbuild

有没有办法在属性中提取唯一值,假设有一些分隔符。所以,如果我有

public function allBy($examId)
{
    return \Exam::with('questions.answers')->get();
}

有没有办法获得价值为" foo; bar"没有重复的价值?我知道Item功能不同,但是我们已经能够找到一种将它用于属性的方法。

1 个答案:

答案 0 :(得分:2)

以下是有关如何使用ItemGroup的Distinct方法并将结果分配回属性的示例:

<Project DefaultTargets="TestDistinct" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Values>foo;bar;bar;foo</Values>
  </PropertyGroup>
  <Target Name="TestDistinct">
    <ItemGroup>
      <ValueGroup Include="$(Values)"/>
    </ItemGroup>
    <PropertyGroup>
      <DistinctValues>@(ValueGroup->Distinct())</DistinctValues>
    </PropertyGroup>
    <Message Text="$(DistinctValues)" />
   </Target>
 </Project>

快速解释它是如何工作的。 MSBuild的PropertyGroup只能保存单值元素(属性)。 ItemGroup是列表的模拟。由于您需要对值列表进行操作 - 要提取不同的列表,您需要一个ItemGroup。然后,您应用Distinct()方法并将结果分配给名为<DistinctValues>的新属性。现在,您有一个属性,其中包含与原始<Values>属性不同的元素。