ฉันมักจะสร้างลำดับจากค่าเดียวโดยใช้ไวยากรณ์ของอาร์เรย์ดังนี้:
IEnumerable<string> sequence = new string[] { "abc" };
หรือใช้รายการใหม่ ฉันต้องการทราบว่าใครมีวิธีที่ชัดเจนกว่านี้ในการทำสิ่งเดียวกันนี้
ฉันมักจะสร้างลำดับจากค่าเดียวโดยใช้ไวยากรณ์ของอาร์เรย์ดังนี้:
IEnumerable<string> sequence = new string[] { "abc" };
หรือใช้รายการใหม่ ฉันต้องการทราบว่าใครมีวิธีที่ชัดเจนกว่านี้ในการทำสิ่งเดียวกันนี้
Enumerable.From<T>(params T[] items)
ยังคงไม่ได้มีสิ่งที่ต้องการ
คำตอบ:
ตัวอย่างของคุณไม่ใช่ลำดับว่าง แต่เป็นลำดับที่มีองค์ประกอบเดียว ในการสร้างลำดับสตริงว่างคุณสามารถทำได้
var sequence = Enumerable.Empty<string>();
EDIT OP ชี้แจงว่าพวกเขาต้องการสร้างค่าเดียว ในกรณีนั้น
var sequence = Enumerable.Repeat("abc",1);
ฉันชอบสิ่งที่คุณแนะนำ แต่เมื่อละเว้นประเภทอาร์เรย์:
var sequence = new[] { "abc" };
Task.FromResult
เพื่อบรรลุสิ่งนั้นได้
หรือสั้นกว่านั้น
string[] single = { "abc" };
ฉันจะสร้างวิธีการขยาย:
public static T[] Yield<T>(this T item)
{
T[] single = { item };
return single;
}
หรือดีขึ้นและสั้นลงเพียง
public static IEnumerable<T> Yield<T>(this T item)
{
yield return item;
}
บางทีนี่อาจเป็นสิ่งที่Enumerable.Repeat
ทำภายใต้ประทุน
Yield
เป็นสิ่งที่ดี ฉันทำIEnumerable<T> Yield<T>(this T source, params T[] others)
เกินไป
หรือเพียงแค่สร้างวิธีการ
public static IEnumerable<T> CreateEnumerable<T>(params T[] items)
{
if(items == null)
yield break;
foreach (T mitem in items)
yield return mitem;
}
หรือ
public static IEnumerable<T> CreateEnumerable<T>(params T[] items)
{
return items ?? Enumerable.Empty<T>();
}
การใช้งาน:
IEnumerable<string> items = CreateEnumerable("single");