[C#] C #에서 단일 항목 목록을 만들기위한 바로 가기

C #에는 하나의 항목으로 List <T>를 인스턴스화하는 인라인 단축키가 있습니까?

나는 현재하고있다 :

new List<string>( new string[] { "title" } ))

이 코드를 어디에나 가지고 있으면 가독성이 떨어집니다. 나는 다음과 같은 유틸리티 방법을 사용하려고 생각했다.

public static List<T> SingleItemList<T>( T value )
{
    return (new List<T>( new T[] { value } ));
}

그래서 나는 할 수 있었다 :

SingleItemList("title");

더 짧고 깔끔한 방법이 있습니까?

감사.



답변

간단히 이것을 사용하십시오 :

List<string> list = new List<string>() { "single value" };

() 중괄호를 생략 할 수도 있습니다.

List<string> list = new List<string> { "single value" };

업데이트 : 물론 이것은 둘 이상의 항목에 대해서도 작동합니다.

List<string> list = new List<string> { "value1", "value2", ... };


답변

var list = new List<string>(1) { "hello" };

처음에 단일 항목에 대한 공간 만 할당한다는 점을 제외하고 다른 사용자가 게시 한 내용과 매우 유사합니다.

물론 나중에 많은 것들을 추가 할 것이라는 것을 알고 있다면 좋은 생각은 아니지만 여전히 언급 할 가치가 있습니다.


답변

확장 방법을 사용한다는 Michael의 생각은 훨씬 더 간단합니다.

public static List<T> InList<T>(this T item)
{
    return new List<T> { item };
}

그래서 당신은 이것을 할 수 있습니다 :

List<string> foo = "Hello".InList();

내가 좋아하는지 아닌지 잘 모르겠습니다.


답변

Google Java Collections 노출에 기반한 이전 답변과 다른 답변 :

public static class Lists
{
    public static List<T> Of<T>(T item)
    {
        return new List<T> { item };
    }
}

그때:

List<string> x = Lists.Of("Hello");

GJC를 확인하는 것이 좋습니다. 많은 흥미로운 것들이 있습니다. (개인적으로 “알파”태그를 무시할 것입니다- “알파”인 오픈 소스 버전 일 뿐이며 매우 안정적이고 많이 사용되는 내부 API를 기반으로합니다. .)


답변

new[] { "item" }.ToList();

보다 짧다

new List<string> { "item" };

유형을 지정할 필요가 없습니다.


답변

메소드 체인과 함께 확장 메소드를 사용하십시오.

public static List<T> WithItems(this List<T> list, params T[] items)
{
    list.AddRange(items);
    return list;
}

이렇게하면이 작업을 수행 할 수 있습니다.

List<string> strings = new List<string>().WithItems("Yes");

또는

List<string> strings = new List<string>().WithItems("Yes", "No", "Maybe So");

최신 정보

이제리스트 이니셜 라이저를 사용할 수 있습니다 :

var strings = new List<string> { "This", "That", "The Other" };

http://msdn.microsoft.com/en-us/library/bb384062(v=vs.90).aspx 참조


답변

또 다른 방법은 “C # /. Net Little wonders”에 있습니다 (불행히도 사이트는 더 이상 존재하지 않습니다).

Enumerable.Repeat("value",1).ToList()