Click here to Skip to main content
15,902,275 members
Home / Discussions / C#
   

C#

 
GeneralRe: Text file search, combobox and Datagridview C# Help Pin
Member 1329440814-Jul-17 3:07
Member 1329440814-Jul-17 3:07 
AnswerRe: Text file search, combobox and Datagridview C# Help Pin
Ralf Meier14-Jul-17 9:41
mveRalf Meier14-Jul-17 9:41 
GeneralRe: Text file search, combobox and Datagridview C# Help Pin
Member 1329440817-Jul-17 20:18
Member 1329440817-Jul-17 20:18 
AnswerRe: Text file search, combobox and Datagridview C# Help Pin
Ralf Meier17-Jul-17 21:33
mveRalf Meier17-Jul-17 21:33 
GeneralRe: Text file search, combobox and Datagridview C# Help Pin
Member 1329440828-Jul-17 0:25
Member 1329440828-Jul-17 0:25 
GeneralRe: Text file search, combobox and Datagridview C# Help Pin
Ralf Meier28-Jul-17 0:26
mveRalf Meier28-Jul-17 0:26 
AnswerRe: Text file search, combobox and Datagridview C# Help Pin
BillWoodruff5-Jul-17 21:44
professionalBillWoodruff5-Jul-17 21:44 
QuestionIs this madness? The pursuit of single-statement methods Pin
Kevin Li (Li, Ken-un)4-Jul-17 10:13
Kevin Li (Li, Ken-un)4-Jul-17 10:13 
My code started out as something fairly easy to follow like this:
C#
void RemoveDuplicatesButton_Click(object sender, RoutedEventArgs e)
{
    // Create a set to hold a collection of lines that have already been processed.
    SortedSet<T> seen = new SortedSet<T>();
    // Create a StringBuilder to avoid the performance penalty of concatenating strings repeatedly.
    StringBuilder stringBuilder = new StringBuilder();
    // Split the text from the text box by lines and examine each one.
    foreach (string line in this.InputTextBox.Text.Split(new char[] { '\r', '\n' }))
    {
         // If the string is successfully added to the set, then it has not been processed before.
        if (seen.Add(line))
        {
            // Add the line to the output.
            stringBuilder.AppendLine(line);
        }
    }
    // Build the string and assign it to the text box.
    this.InputTextBox.Text = stringBuilder.ToString();
}

Then I factored out some of the code into extension methods, removed the unnecessary curly braces, and got this:
C#
void RemoveDuplicatesButton_Click(object sender, RoutedEventArgs e)
{
    // Create a StringBuilder to avoid the performance penalty of concatenating strings repeatedly.
    StringBuilder stringBuilder = new StringBuilder();
    // Split the text from the text box into a collection of unique lines.
    foreach (string line in this.InputTextBox.Text.SplitLines().Unique<string>())
        // Add the line to the output.
        stringBuilder.AppendLine(line);
    // Build the string and assign it to the text box.
    this.InputTextBox.Text = stringBuilder.ToString();
}

And then I took it a step further.
C#
void RemoveDuplicatesButton_Click(object sender, RoutedEventArgs e) =>
    // Take the text from the text box, split it by lines, remove the duplicates, and assign the results to the text box.
    this.InputTextBox.Text = this.InputTextBox.Text.SplitLines().Unique<string>().Aggregate<string, StringBuilder, string>(
        new StringBuilder(),
        (StringBuilder stringBuilder, string line) => stringBuilder.AppendLine(line),
        (StringBuilder stringBuilder) => stringBuilder.ToString());

And the one-liner:
C#
void RemoveDuplicatesButton_Click(object sender, RoutedEventArgs e) => this.InputTextBox.Text = this.InputTextBox.Text.SplitLines().Unique().Aggregate(new StringBuilder(), (sb, line) => sb.AppendLine(line), sb => sb.ToString());

I get great joy as a programmer by factoring out as much code as possible, but at which point should I have stopped for this example? Should I perhaps switch to another programming language that’s more conducive to this style of writing?
AnswerRe: Is this madness? The pursuit of single-statement methods Pin
PIEBALDconsult4-Jul-17 10:21
mvePIEBALDconsult4-Jul-17 10:21 
SuggestionRe: Is this madness? The pursuit of single-statement methods Pin
Richard Deeming4-Jul-17 11:09
mveRichard Deeming4-Jul-17 11:09 
GeneralRe: Is this madness? The pursuit of single-statement methods Pin
Pete O'Hanlon5-Jul-17 4:44
mvePete O'Hanlon5-Jul-17 4:44 
AnswerRe: Is this madness? The pursuit of single-statement methods Pin
Marc Clifton4-Jul-17 11:26
mvaMarc Clifton4-Jul-17 11:26 
AnswerRe: Is this madness? The pursuit of single-statement methods Pin
Bernhard Hiller4-Jul-17 21:31
Bernhard Hiller4-Jul-17 21:31 
AnswerRe: Is this madness? The pursuit of single-statement methods Pin
ScottM14-Jul-17 22:49
ScottM14-Jul-17 22:49 
AnswerRe: Is this madness? The pursuit of single-statement methods Pin
Pete O'Hanlon5-Jul-17 1:08
mvePete O'Hanlon5-Jul-17 1:08 
AnswerRe: Is this madness? The pursuit of single-statement methods Pin
Pete O'Hanlon5-Jul-17 4:20
mvePete O'Hanlon5-Jul-17 4:20 
GeneralRe: Is this madness? The pursuit of single-statement methods Pin
Rob Philpott5-Jul-17 23:22
Rob Philpott5-Jul-17 23:22 
GeneralRe: Is this madness? The pursuit of single-statement methods Pin
Pete O'Hanlon6-Jul-17 0:04
mvePete O'Hanlon6-Jul-17 0:04 
AnswerRe: Is this madness? The pursuit of single-statement methods Pin
Gerry Schmitz5-Jul-17 5:13
mveGerry Schmitz5-Jul-17 5:13 
AnswerRe: Is this madness? The pursuit of single-statement methods Pin
jschell5-Jul-17 6:28
jschell5-Jul-17 6:28 
AnswerRe: Is this madness? The pursuit of single-statement methods Pin
Eddy Vluggen5-Jul-17 7:56
professionalEddy Vluggen5-Jul-17 7:56 
AnswerRe: Is this madness? The pursuit of single-statement methods Pin
BillWoodruff6-Jul-17 0:03
professionalBillWoodruff6-Jul-17 0:03 
GeneralRe: Is this madness? The pursuit of single-statement methods Pin
Rob Philpott6-Jul-17 0:26
Rob Philpott6-Jul-17 0:26 
GeneralRe: Is this madness? The pursuit of single-statement methods Pin
BillWoodruff6-Jul-17 0:55
professionalBillWoodruff6-Jul-17 0:55 
GeneralRe: Is this madness? The pursuit of single-statement methods Pin
Richard Deeming6-Jul-17 1:30
mveRichard Deeming6-Jul-17 1:30 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.