© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
C#C
C#•3y ago•
13 replies
SWEETPONY

✅ Is it possible to use union type in C#?

I'm not sure that it's called exactly Union Type
Let me introduce the issue

I have this class which represent generator:
public class UISchemaGenerator
{
    private readonly ConcurrentDictionary<(CustomFieldSet, CultureInfo), UISchemaSpecification> _cache =
        new();

    public UISchemaSpecification Generate(
        CustomFieldSet fieldSet,
        MandatorySecurityScope scope,
        CultureInfo culture = default)
    {
        culture ??= CultureInfo.CurrentCulture;

        return _cache.GetOrAdd(
            key: (fieldSet, culture),
            valueFactory: _ => InternalGenerator(fieldSet, scope, culture));
    }

    private UISchemaSpecification InternalGenerator(
        CustomFieldSet fieldSet,
        MandatorySecurityScope scope,
        CultureInfo culture)
    {
        var schemaBuilder = new UISchemaBuilder();

        foreach (var group in fieldSet.Groups)
        {
            schemaBuilder
                .StartGroup(group.Title)
                    .AddFields(scope, group.Fields)
                .EndGroup();
        }

        return schemaBuilder.Build();
    }

    private UISchemaSpecification InternalGenerator(
        CustomField.CustomField fieldSet,
        MandatorySecurityScope scope,
        CultureInfo culture)
    {
        var schemaBuilder = new UISchemaBuilder()
            .AddField(fieldSet)
            .Build();

        return schemaBuilder;
    }
}
public class UISchemaGenerator
{
    private readonly ConcurrentDictionary<(CustomFieldSet, CultureInfo), UISchemaSpecification> _cache =
        new();

    public UISchemaSpecification Generate(
        CustomFieldSet fieldSet,
        MandatorySecurityScope scope,
        CultureInfo culture = default)
    {
        culture ??= CultureInfo.CurrentCulture;

        return _cache.GetOrAdd(
            key: (fieldSet, culture),
            valueFactory: _ => InternalGenerator(fieldSet, scope, culture));
    }

    private UISchemaSpecification InternalGenerator(
        CustomFieldSet fieldSet,
        MandatorySecurityScope scope,
        CultureInfo culture)
    {
        var schemaBuilder = new UISchemaBuilder();

        foreach (var group in fieldSet.Groups)
        {
            schemaBuilder
                .StartGroup(group.Title)
                    .AddFields(scope, group.Fields)
                .EndGroup();
        }

        return schemaBuilder.Build();
    }

    private UISchemaSpecification InternalGenerator(
        CustomField.CustomField fieldSet,
        MandatorySecurityScope scope,
        CultureInfo culture)
    {
        var schemaBuilder = new UISchemaBuilder()
            .AddField(fieldSet)
            .Build();

        return schemaBuilder;
    }
}


I want somehow add following logic:
public UISchemaSpecification Generate(
   Union<CustomField, CustomFieldSet> fieldSet,
   MandatorySecurityScope scope,
   CultureInfo culture = default)
{
    // if someone passed CustomField then call InternalGenerator for CustomField
    // if someone passed CustomFieldSetthen call InternalGenerator for CustomFieldSet
}
public UISchemaSpecification Generate(
   Union<CustomField, CustomFieldSet> fieldSet,
   MandatorySecurityScope scope,
   CultureInfo culture = default)
{
    // if someone passed CustomField then call InternalGenerator for CustomField
    // if someone passed CustomFieldSetthen call InternalGenerator for CustomFieldSet
}


I don't want to override method because it will be too much code in one class
dictionary x2, Generate x2, InternalGenerator x2
dictionary x2, Generate x2, InternalGenerator x2
C# banner
C#Join
We are a programming server aimed at coders discussing everything related to C# (CSharp) and .NET.
61,871Members
Resources
Was this page helpful?

Similar Threads

Recent Announcements

Similar Threads

✅ Is it possible to use nameof in attributes?
C#CC# / help
3y ago
❔ Is it possible to build a session in WinForm C#?
C#CC# / help
3y ago
✅ Is it possible to use grouping here?
C#CC# / help
3y ago
✅ What is the use of `LogLevel` type in C#?
C#CC# / help
15mo ago