'un iki değerini döndürdüğü yöntemleri yazmam gerektiğinde, genellikle List<string>
değerini döndüren şu koddaki gibi giderim. Ya da, örneğin kimlik ve dizgisi, daha sonra List<object>
döndürüp, dizin dizin numarası ve yeniden yeniden değerleriyle seçin.İki değeri bir yöntemden döndürmenin en iyi yolu nedir?
Bu yeniden sıralama ve dizine göre başvuru dizini yetersiz görünüyor, dolayısıyla iki değer döndüren yöntemler için yeni bir alışkanlık geliştirmek istiyorum. Bunun için en iyi desen nedir?
using System;
using System.Collections.Generic;
using System.Linq;
namespace MultipleReturns
{
class Program
{
static void Main(string[] args)
{
string extension = "txt";
{
List<string> entries = GetIdCodeAndFileName("first.txt", extension);
Console.WriteLine("{0}, {1}", entries[0], entries[1]);
}
{
List<string> entries = GetIdCodeAndFileName("first", extension);
Console.WriteLine("{0}, {1}", entries[0], entries[1]);
}
Console.ReadLine();
}
/// <summary>
/// gets "first.txt", "txt" and returns "first", "first.txt"
/// gets "first", "txt" and returns "first", "first.txt"
/// it is assumed that extensions will always match
/// </summary>
/// <param name="line"></param>
public static List<string> GetIdCodeAndFileName(string line, string extension)
{
if (line.Contains("."))
{
List<string> parts = line.BreakIntoParts(".");
List<string> returnItems = new List<string>();
returnItems.Add(parts[0]);
returnItems.Add(line);
return returnItems;
}
else
{
List<string> returnItems = new List<string>();
returnItems.Add(line);
returnItems.Add(line + "." + extension);
return returnItems;
}
}
}
public static class StringHelpers
{
public static List<string> BreakIntoParts(this string line, string separator)
{
if (String.IsNullOrEmpty(line))
return null;
else
{
return line.Split(new string[] { separator }, StringSplitOptions.None).Select(p => p.Trim()).ToList();
}
}
}
}
Eklendi:
Ok, sayesinde herkes, ben, iyi, gerçekten out
kolay okunması olmasıydı hiç düşünmemiştim "özel bir sınıf dönmek " cevaplar like kesmek gibi görünüyor beni ilk değişken bir şekilde dönen ve başka ikinci, burada özel bir sınıf dönen benim üstlenmeden geçerli:
using System;
using System.Collections.Generic;
using System.Linq;
namespace MultipleReturns
{
class Program
{
static void Main(string[] args)
{
string extension = "txt";
{
IdCodeFileNamePair pair = GetIdCodeAndFileName("first.txt", extension);
Console.WriteLine("{0}, {1}", pair.IdCode, pair.FileName);
}
{
IdCodeFileNamePair pair = GetIdCodeAndFileName("first", extension);
Console.WriteLine("{0}, {1}", pair.IdCode, pair.FileName);
}
Console.ReadLine();
}
/// <summary>
/// gets "first.txt", "txt" and returns "first", "first.txt"
/// gets "first", "txt" and returns "first", "first.txt"
/// it is assumed that extensions will always match
/// </summary>
/// <param name="line"></param>
public static IdCodeFileNamePair GetIdCodeAndFileName(string line, string extension)
{
if (line.Contains("."))
{
List<string> parts = line.BreakIntoParts(".");
List<string> returnItems = new List<string>();
return new IdCodeFileNamePair { IdCode = parts[0], FileName = line };
}
else
{
List<string> returnItems = new List<string>();
return new IdCodeFileNamePair { IdCode = line, FileName = line + "." + extension };
}
}
}
public static class StringHelpers
{
public static List<string> BreakIntoParts(this string line, string separator)
{
if (String.IsNullOrEmpty(line))
return null;
else
{
return line.Split(new string[] { separator }, StringSplitOptions.None).Select(p => p.Trim()).ToList();
}
}
}
public class IdCodeFileNamePair
{
public string IdCode { get; set; }
public string FileName { get; set; }
}
}
@tehMick Bu etiketleri kaldırmak için neden kendinizin üstlendiğinizden emin değil misiniz? Benim için alakalı görünüyorlar. –
En iyi çözümü unutma: Her yöntemin mantıklı bir şekilde bir şeyi döndürmesi için kodu yeniden düzenleyin. İki sonuç döndüren bir yönteme sahip olmanız, yöntemin yeniden düzenleme işleminden yararlanabileceğini gösteren kırmızı bir bayraktır. –