在C#中,是否有内联快捷方式来实例化只包含一个项目的List <T>.
我现在正在做:
new List<string>( new string[] { "title" } ))
Run Code Online (Sandbox Code Playgroud)
在任何地方使用此代码会降低可读性 我曾想过使用这样的实用方法:
public static List<T> SingleItemList<T>( T value )
{
return (new List<T>( new T[] { value } ));
}
Run Code Online (Sandbox Code Playgroud)
所以我能做到:
SingleItemList("title");
Run Code Online (Sandbox Code Playgroud)
有更短/更清洁的方式吗?
谢谢.
M4N*_*M4N 230
只需使用:
List<string> list = new List<string>() { "single value" };
Run Code Online (Sandbox Code Playgroud)
你甚至可以省略()大括号:
List<string> list = new List<string> { "single value" };
Run Code Online (Sandbox Code Playgroud)
更新:当然这也适用于多个条目:
List<string> list = new List<string> { "value1", "value2", ... };
Run Code Online (Sandbox Code Playgroud)
Joe*_*orn 36
var list = new List<string>(1) { "hello" };
Run Code Online (Sandbox Code Playgroud)
与其他人发布的内容非常相似,只是它确保最初只为单个项目分配空间.
当然,如果你知道你以后会添加一堆东西,那可能不是一个好主意,但仍然值得一提.
Jon*_*eet 26
迈克尔使用扩展方法的想法导致更简单的事情:
public static List<T> InList<T>(this T item)
{
return new List<T> { item };
}
Run Code Online (Sandbox Code Playgroud)
所以你可以这样做:
List<string> foo = "Hello".InList();
Run Code Online (Sandbox Code Playgroud)
我不确定我是否喜欢它,请注意......
Jon*_*eet 16
基于对Google Java Collections的曝光,对我之前的答案有不同的答案:
public static class Lists
{
public static List<T> Of<T>(T item)
{
return new List<T> { item };
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
List<string> x = Lists.Of("Hello");
Run Code Online (Sandbox Code Playgroud)
我建议查看GJC - 它有很多有趣的内容.(我个人忽略了"alpha"标签 - 它只是开源版本的"alpha",它基于一个非常稳定且使用频繁的内部API .)
使用带方法链接的扩展方法.
public static List<T> WithItems(this List<T> list, params T[] items)
{
list.AddRange(items);
return list;
}
Run Code Online (Sandbox Code Playgroud)
这可以让你这样做:
List<string> strings = new List<string>().WithItems("Yes");
Run Code Online (Sandbox Code Playgroud)
要么
List<string> strings = new List<string>().WithItems("Yes", "No", "Maybe So");
Run Code Online (Sandbox Code Playgroud)
更新
您现在可以使用列表初始值设定项:
var strings = new List<string> { "This", "That", "The Other" };
Run Code Online (Sandbox Code Playgroud)
请参阅http://msdn.microsoft.com/en-us/library/bb384062(v=vs.90).aspx
new[] { "item" }.ToList();
Run Code Online (Sandbox Code Playgroud)
它短于
new List<string> { "item" };
Run Code Online (Sandbox Code Playgroud)
而且您不必指定类型.
对于 Java 中可枚举的单个项目,它将是 Collections.singleton("string");
在 c# 中,这将比新列表更有效:
public class SingleEnumerator<T> : IEnumerable<T>
{
private readonly T m_Value;
public SingleEnumerator(T value)
{
m_Value = value;
}
public IEnumerator<T> GetEnumerator()
{
yield return m_Value;
}
IEnumerator IEnumerable.GetEnumerator()
{
yield return m_Value;
}
}
Run Code Online (Sandbox Code Playgroud)
但是有没有更简单的使用框架的方法?