Skip to content

Bits of .NET

Daily micro-tips for C#, SQL, performance, and scalable backend engineering.

  • Asp.Net Core
  • C#
  • SQL
  • JavaScript
  • CSS
  • About
  • ErcanOPAK.com
  • No Access
  • Privacy Policy
C#

C#: Use ValueTuple for Lightweight Multiple Return Values

- 19.07.26 - ErcanOPAK

📦 ValueTuple = Lightweight Tuples

Return multiple values without creating classes. ValueTuple is lightweight, value-based, convenient.

📦 Tuple (Reference Type)

var result = Tuple.Create(1, "Alice");
int id = result.Item1;
string name = result.Item2;

✅ ValueTuple (Value Type)

var result = (Id: 1, Name: "Alice");
int id = result.Id;
string name = result.Name;

🎯 ValueTuple Examples

// Named tuple
var person = (Name: "Alice", Age: 30, Email: "alice@example.com");
Console.WriteLine(person.Name);

// Return multiple values
public (int Id, string Name, string Email) GetUser()
{
    return (1, "Alice", "alice@example.com");
}
var (id, name, email) = GetUser();

// Deconstruction
var user = (Id: 1, Name: "Alice");
var (userId, userName) = user;

// Tuple as parameter
public void ProcessUser((string Name, int Age) user)
{
    Console.WriteLine($"{user.Name}, {user.Age}");
}

// Tuple in LINQ
var result = users.Select(u => (u.Id, u.Name));

// Comparing tuples
var t1 = (1, "Alice");
var t2 = (1, "Alice");
bool equal = t1 == t2;  // True

// Tuple with methods
public (bool Success, string Message, User User) TryGetUser(int id)
{
    var user = _context.Users.Find(id);
    if (user == null)
        return (false, "User not found", null);
    
    return (true, "Success", user);
}

var result = TryGetUser(1);
if (result.Success)
{
    Console.WriteLine(result.User.Name);
}

// ValueTuple Use Cases
- Return multiple values
- Lightweight data grouping
- LINQ projections
- Dictionary keys
- Quick data structures

💡 ValueTuple Tips

  • Return multiple values
  • Lightweight data grouping
  • LINQ projections
  • Dictionary keys
  • Quick data structures

“ValueTuple is lightweight and named. No classes needed. Essential for multiple return values.”

— C# Developer

Related posts:

C#: Use Nullable Value Types for Nullable Values

C# — async Lambdas Capture Variables Unexpectedly

IEnumerable Executes More Than Once

Post Views: 1

Post navigation

C#: Use Object Initializers for Clean Object Creation
Visual Studio: Use Code Cleanup for Consistent Formatting

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

October 2026
M T W T F S S
 1234
567891011
12131415161718
19202122232425
262728293031  
« Sep    

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (953)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)
  • How to enable, disable and check if Service Broker is enabled on a database in SQL Server (624)
  • Add Constraint to SQL Table to ensure email contains @ (590)
  • Average of all values in a column that are not zero in SQL (553)
  • How to use Map Mode for Vertical Scroll Mode in Visual Studio (526)
  • Find numbers with more than two decimal places in SQL (468)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps
  • Photoshop: Fix a Color Profile Mismatch That Makes Printed Output Look Nothing Like What You Saw On Screen
  • WordPress: Fix Search Results That Return Pages From a Theme You Deactivated Months Ago
  • Visual Studio: Fix a Test Project That Builds Fine Alone but Fails to Discover Any Tests After a NuGet Restore
  • ASP.NET Core: Fix a File Upload That Times Out on Slow Connections Only Because Kestrel’s Minimum Data Rate Feature Kicked In
  • JavaScript: Fix an Array Destructuring Default Value That Silently Never Applies Because null Was Passed Instead of Undefined

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (953)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps

Social

  • ErcanOPAK.com
  • GoodReads
  • LetterBoxD
  • Linkedin
  • The Blog
  • Twitter
© 2026 Bits of .NET | Built with Xblog Plus free WordPress theme by wpthemespace.com