Skip to content

Instantly share code, notes, and snippets.

@digitalconceptvisuals
Created July 30, 2020 18:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save digitalconceptvisuals/79a01a81ed6a31d065e7602600bc1c6e to your computer and use it in GitHub Desktop.
Save digitalconceptvisuals/79a01a81ed6a31d065e7602600bc1c6e to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Text;
using ConverterFunction = System.Func<string[], string>;
class Angel
{
static string camelConverter(string[] words)
{
var result = new StringBuilder();
// First word is lower
result.Append(
words[0]
.Trim()
.ToLower()
);
// Subsequent words are Proper case
for (var offset = 1;
offset < words.Length;
offset++)
{
// First letter is uppercase
result.Append(
words[offset]
.Substring(0, 1)
.ToUpper());
// Rest of the letters are lowercase
result.Append(
words[offset].
Substring(1).
ToLower());
}
return result.ToString();
}
static string lowerConverter(params string[] words)
{
// Accumulate result in StringBuilder
var result = new StringBuilder();
// Every word is converted to lower
// And concatenated
foreach (var word in words)
{
result.Append(
word
.Trim()
.ToLower());
}
return result.ToString();
}
Dictionary<string, ConverterFunction> converters =
new Dictionary<string, ConverterFunction>
{
{"lower", lowerConverter},
{"camel", camelConverter}
};
public string changeCase(string caseType, params string[] words)
{
// Sanitize the input
caseType = caseType.Trim().ToLower();
ConverterFunction converter;
converters.TryGetValue(caseType, out converter);
if (converter != null)
return converter(words);
return null;
}
public void AddConverter(string caseType, ConverterFunction func)
{
converters[caseType] = func;
}
}
class ClientClass
{
static string snakeConverter(params string[] words)
{
// snake_case_is_separated_by_underscore
var result = new StringBuilder();
// Convert each word to lower
// and separate using underscore
for (var offset = 0;
offset < words.Length-1;
offset++)
{
result.Append(
words[offset]
.Trim()
.ToLower()
);
result.Append("_");
}
// Add the last word without _
result.Append(
words[words.Length - 1]
.Trim()
.ToLower()
);
return result.ToString();
}
static void Main(string[] args)
{
var obj = new Angel();
obj.AddConverter("snake", snakeConverter);
Console.WriteLine(obj.changeCase("snake", "Two", "Words"));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment