✅ 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:
I want somehow add following logic:
I don't want to override method because it will be too much code in one class
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 x2dictionary x2, Generate x2, InternalGenerator x2