Skip to main content
I'm going to break out my self-answer-edit into a proper answer
Source Link
Rag
  • 6.7k
  • 2
  • 35
  • 41

I'm using some functional stuff in C# and keep getting stuck on the fact that List.Add doesn't return the updated list.

In general, I'd like to call a function on an object and then return the updated object.

For example it would be great if C# had a comma operator:

((accum, data) => accum.Add(data), accum) 

I could write my own "comma operator" like this:

static T comma(Action a, Func<T> result) { a(); return result(); } 

It looks like it would work but the call site would ugly. My first example would be something like:

((accum, data) => comma(accum.Add(data), ()=>accum)) 

Enough examples! What's the cleanest way to do this without another developer coming along later and wrinkling his or her nose at the code smell?

Edit:

Aw, come on StackOverflow. A week later I discover that you can do almost exactly my first example naturally using code blocks.

((accum, data) => {accum.Add(data); return accum;}) 

I'm using some functional stuff in C# and keep getting stuck on the fact that List.Add doesn't return the updated list.

In general, I'd like to call a function on an object and then return the updated object.

For example it would be great if C# had a comma operator:

((accum, data) => accum.Add(data), accum) 

I could write my own "comma operator" like this:

static T comma(Action a, Func<T> result) { a(); return result(); } 

It looks like it would work but the call site would ugly. My first example would be something like:

((accum, data) => comma(accum.Add(data), ()=>accum)) 

Enough examples! What's the cleanest way to do this without another developer coming along later and wrinkling his or her nose at the code smell?

Edit:

Aw, come on StackOverflow. A week later I discover that you can do almost exactly my first example naturally using code blocks.

((accum, data) => {accum.Add(data); return accum;}) 

I'm using some functional stuff in C# and keep getting stuck on the fact that List.Add doesn't return the updated list.

In general, I'd like to call a function on an object and then return the updated object.

For example it would be great if C# had a comma operator:

((accum, data) => accum.Add(data), accum) 

I could write my own "comma operator" like this:

static T comma(Action a, Func<T> result) { a(); return result(); } 

It looks like it would work but the call site would ugly. My first example would be something like:

((accum, data) => comma(accum.Add(data), ()=>accum)) 

Enough examples! What's the cleanest way to do this without another developer coming along later and wrinkling his or her nose at the code smell?

added 203 characters in body
Source Link
Rag
  • 6.7k
  • 2
  • 35
  • 41

I'm using some functional stuff in C# and keep getting stuck on the fact that List.Add doesn't return the updated list.

In general, I'd like to call a function on an object and then return the updated object.

For example it would be great if C# had a comma operator:

((accum, data) => accum.Add(data), accum) 

I could write my own "comma operator" like this:

static T comma(Action a, Func<T> result) { a(); return result(); } 

It looks like it would work but the call site would ugly. My first example would be something like:

((accum, data) => comma(accum.Add(data), ()=>accum)) 

Enough examples! What's the cleanest way to do this without another developer coming along later and wrinkling his or her nose at the code smell?

Edit:

Aw, come on StackOverflow. A week later I discover that you can do almost exactly my first example naturally using code blocks.

((accum, data) => {accum.Add(data); return accum;}) 

I'm using some functional stuff in C# and keep getting stuck on the fact that List.Add doesn't return the updated list.

In general, I'd like to call a function on an object and then return the updated object.

For example it would be great if C# had a comma operator:

((accum, data) => accum.Add(data), accum) 

I could write my own "comma operator" like this:

static T comma(Action a, Func<T> result) { a(); return result(); } 

It looks like it would work but the call site would ugly. My first example would be something like:

((accum, data) => comma(accum.Add(data), ()=>accum)) 

Enough examples! What's the cleanest way to do this without another developer coming along later and wrinkling his or her nose at the code smell?

I'm using some functional stuff in C# and keep getting stuck on the fact that List.Add doesn't return the updated list.

In general, I'd like to call a function on an object and then return the updated object.

For example it would be great if C# had a comma operator:

((accum, data) => accum.Add(data), accum) 

I could write my own "comma operator" like this:

static T comma(Action a, Func<T> result) { a(); return result(); } 

It looks like it would work but the call site would ugly. My first example would be something like:

((accum, data) => comma(accum.Add(data), ()=>accum)) 

Enough examples! What's the cleanest way to do this without another developer coming along later and wrinkling his or her nose at the code smell?

Edit:

Aw, come on StackOverflow. A week later I discover that you can do almost exactly my first example naturally using code blocks.

((accum, data) => {accum.Add(data); return accum;}) 
more accurate name to assist searching
Link
Rag
  • 6.7k
  • 2
  • 35
  • 41

Is there idiomatic C# for what I'm tryingequivalent to doC's comma operator?

Source Link
Rag
  • 6.7k
  • 2
  • 35
  • 41
Loading