Skip to content

Commit

Permalink
Merge pull request #52 from kurnakovv/ec-9
Browse files Browse the repository at this point in the history
Ec 9
  • Loading branch information
kurnakovv committed Mar 4, 2024
2 parents 27e0acf + c183d54 commit a719bae
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 0 deletions.
44 changes: 44 additions & 0 deletions DocsReadMe.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,3 +129,47 @@ bool isConverted = invalidSecondValue.TryToAnother(out AnotherEnum anotherEnum);
// Output:
// [isConverted, anotherEnum] - [false, First]
```

# ToOther

**Description**

Convert input enums to other enums.

**Signature**

IEnumerable<TOutputEnum> ToOther<TInputEnum, TOutputEnum>(this IEnumerable<InputEnum>, bool [default = true]) where TInputEnum, TOutputEnum : Enum

**Type Parameters**

`TInputEnum` - Type of `enumValues`
`TOutputEnum` - Enum type that we want to get after convert.

**Parameters**

- `IEnumerable<TInputEnum> enumValues` - The input enums that we want to convert to enumerable of `TOutputEnum`.
- `bool ignoreCase` - Ignore or regard case.

**Returns**

`IEnumerable<TOutputEnum>`

**Code examples**
```csharp
// Enums
public enum InputEnum { First, Second, Third }
public enum OutputEnum { First, Second, Third }
```

```csharp
IEnumerable<InputEnum> inputEnums = new List<InputEnum>()
{
InputEnum.First, InputEnum.Second, InputEnum.Third,
};
IEnumerable<OutputEnum> output = inputEnums.ToOther<InputEnum, OutputEnum>(); // or false if case is important.
// output
// 1 - OutputEnum.First
// 2 - OutputEnum.Second
// 3 - OutputEnum.Third
```
40 changes: 40 additions & 0 deletions src/EnumConverter/EnumConverter.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;

namespace EnumConverterLibrary
{
Expand Down Expand Up @@ -99,6 +100,45 @@ public static TAnotherEnum ToAnotherOrDefault<TAnotherEnum>(this Enum enumValue,
: default(TAnotherEnum);
}

/// <summary>
/// Convert <paramref name="enumValues"/> to enumerable of <typeparamref name="TOutputEnum"/>.
/// </summary>
/// <typeparam name="TInputEnum">Type of <paramref name="enumValues"/>.</typeparam>
/// <typeparam name="TOutputEnum">Enum type that we want to get after convert.</typeparam>
/// <param name="enumValues">The input enums that we want to convert to enumerable of <typeparamref name="TOutputEnum"/>.</param>
/// <param name="ignoreCase">Ignore or regard case.</param>
/// <exception cref="ArgumentNullException"/>
/// <exception cref="ArgumentException"/>
/// <exception cref="OverflowException"/>
/// <returns>Enumerable of <typeparamref name="TOutputEnum"/>.</returns>
public static IEnumerable<TOutputEnum> ToOther<TInputEnum, TOutputEnum>(this IEnumerable<TInputEnum> enumValues, bool ignoreCase)
where TInputEnum : Enum
where TOutputEnum : Enum
{
foreach (Enum value in enumValues)
{
yield return value.ToAnother<TOutputEnum>(ignoreCase);
}
}

/// <summary>
/// Convert <paramref name="enumValues"/> to enumerable of <typeparamref name="TOutputEnum"/>.
/// </summary>
/// <remarks>ignoreCase = true.</remarks>
/// <typeparam name="TInputEnum">Type of <paramref name="enumValues"/>.</typeparam>
/// <typeparam name="TOutputEnum">Enum type that we want to get after convert.</typeparam>
/// <param name="enumValues">The input enums that we want to convert to enumerable of <typeparamref name="TOutputEnum"/>.</param>
/// <exception cref="ArgumentNullException"/>
/// <exception cref="ArgumentException"/>
/// <exception cref="OverflowException"/>
/// <returns>Enumerable of <typeparamref name="TOutputEnum"/>.</returns>
public static IEnumerable<TOutputEnum> ToOther<TInputEnum, TOutputEnum>(this IEnumerable<TInputEnum> enumValues)
where TInputEnum : Enum
where TOutputEnum : Enum
{
return enumValues.ToOther<TInputEnum, TOutputEnum>(true);
}

/// <summary>
/// Convert <paramref name="stringValue"/> to <typeparamref name="TEnum"/>.
/// </summary>
Expand Down
32 changes: 32 additions & 0 deletions tests/EnumConverter.UnitTests/EnumConverterTest.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using EnumConverterLibrary.UnitTests.TestEnums;
using System;
using System.Collections.Generic;
using System.Linq;
using Xunit;

namespace EnumConverterLibrary.UnitTests
Expand Down Expand Up @@ -263,6 +265,36 @@ public void ToAnotherOrDefault_CanConvertInputEnumToAnotherEnumWithIgnoreCaseEqu
Assert.Equal(AnotherEnum.Third, anotherEnumThird);
}

[Fact]
public void ToOther_CanConvertInputEnumsToOtherEnums_OtherEnums()
{
IEnumerable<InputEnum> inputEnums = new List<InputEnum>()
{
InputEnum.First, InputEnum.Second, InputEnum.Third,
};

List<AnotherEnum> result = inputEnums.ToOther<InputEnum, AnotherEnum>().ToList();

Assert.Equal(AnotherEnum.First, result[0]);
Assert.Equal(AnotherEnum.Second, result[1]);
Assert.Equal(AnotherEnum.Third, result[2]);
}

[Fact]
public void ToOther_CanConvertInputEnumsToOtherEnumsWithIgnoreCaseEqualsFalse_OtherEnums()
{
IEnumerable<InputEnum> inputEnums = new List<InputEnum>()
{
InputEnum.First, InputEnum.Second, InputEnum.Third,
};

List<AnotherEnum> result = inputEnums.ToOther<InputEnum, AnotherEnum>(false).ToList();

Assert.Equal(AnotherEnum.First, result[0]);
Assert.Equal(AnotherEnum.Second, result[1]);
Assert.Equal(AnotherEnum.Third, result[2]);
}

[Fact]
public void ToEnum_CanConvertStringToEnum_MyEnum()
{
Expand Down

0 comments on commit a719bae

Please sign in to comment.