우수하고 선호하는 확장 방법 을 게시하는 답변 목록을 만들어 봅시다 .
요구 사항은 전체 코드를 게시하고 사용 방법에 대한 예와 설명을 게시해야합니다.
이 주제에 대한 높은 관심을 바탕으로 Codeplex에 extensionoverflow라는 오픈 소스 프로젝트를 설정했습니다 .
Codeplex 프로젝트에 코드를 넣을 수 있도록 답을 표시하십시오.
링크가 아닌 전체 소스 코드를 게시하십시오.
Codeplex 뉴스 :
24.08.2010 Codeplex 페이지는 다음과 같습니다 : http://extensionoverflow.codeplex.com/
2008년 11월 11일 XMLSERIALIZE / XmlDeserialize는 지금 구현 및 단위 테스트 .
11.11.2008 더 많은 개발자를위한 여지가 여전히 남아 있습니다. 😉 지금 가입하십시오!
2008 년 11 월 11 일 세 번째 제공자가 ExtensionOverflow 에 합류 하여 BKristensen에 오신 것을 환영합니다
2008년 11월 11일 FormatWith는 지금 구현 및 단위 테스트 .
2008 년 9 월 11 일 두 번째 제공자가 ExtensionOverflow 에 합류했습니다 . chakrit에 오신 것을 환영합니다 .
2008 년 9 월 11 일 더 많은 개발자가 필요합니다. 😉
2008 년 9 월 11 일 ThrowIfArgumentIsNull 은 이제 Codeplex 에서 구현 및 테스트 되었습니다.
답변
public static bool In<T>(this T source, params T[] list)
{
if(null==source) throw new ArgumentNullException("source");
return list.Contains(source);
}
교체 할 수 있습니다 :
if(reallyLongIntegerVariableName == 1 ||
reallyLongIntegerVariableName == 6 ||
reallyLongIntegerVariableName == 9 ||
reallyLongIntegerVariableName == 11)
{
// do something....
}
and
if(reallyLongStringVariableName == "string1" ||
reallyLongStringVariableName == "string2" ||
reallyLongStringVariableName == "string3")
{
// do something....
}
and
if(reallyLongMethodParameterName == SomeEnum.Value1 ||
reallyLongMethodParameterName == SomeEnum.Value2 ||
reallyLongMethodParameterName == SomeEnum.Value3 ||
reallyLongMethodParameterName == SomeEnum.Value4)
{
// do something....
}
와:
if(reallyLongIntegerVariableName.In(1,6,9,11))
{
// do something....
}
and
if(reallyLongStringVariableName.In("string1","string2","string3"))
{
// do something....
}
and
if(reallyLongMethodParameterName.In(SomeEnum.Value1, SomeEnum.Value2, SomeEnum.Value3, SomeEnum.Value4)
{
// do something....
}
답변
MiscUtil 프로젝트 에 다양한 확장 방법 이 있습니다 (전체 소스를 사용할 수 있습니다-여기서는 반복하지 않겠습니다). 내가 좋아하는 것 중 일부는 다른 수업 (예 : 범위)과 관련이 있습니다.
날짜 및 시간 항목-대부분 단위 테스트에 사용됩니다. 프로덕션에서 사용할 것인지 확실하지 않습니다. 🙂
var birthday = 19.June(1976);
var workingDay = 7.Hours() + 30.Minutes();
범위와 스테핑-Marc Gravell에게 이를 가능하게하는 운영자의 작업 에 감사드립니다 .
var evenNaturals = 2.To(int.MaxValue).Step(2);
var daysSinceBirth = birthday.To(DateTime.Today).Step(1.Days());
비교 :
var myComparer = ProjectionComparer.Create(Person p => p.Name);
var next = myComparer.ThenBy(p => p.Age);
var reversed = myComparer.Reverse();
인수 확인 :
x.ThrowIfNull("x");
익명 형식 (또는 적절한 속성을 가진 다른 형식)에 적용되는 LINQ to XML :
// <Name>Jon</Name><Age>32</Age>
new { Name="Jon", Age=32}.ToXElements();
// Name="Jon" Age="32" (as XAttributes, obviously)
new { Name="Jon", Age=32}.ToXAttributes()
LINQ 푸시-설명하는 데 시간이 오래 걸리지 만 검색하십시오.
답변
문자열. 형식 바로 가기 :
public static class StringExtensions
{
// Enable quick and more natural string.Format calls
public static string F(this string s, params object[] args)
{
return string.Format(s, args);
}
}
예:
var s = "The co-ordinate is ({0}, {1})".F(point.X, point.Y);
빠른 복사하여 붙여 넣기를 하려면 여기 로 이동 하십시오 .
"some string".F("param")
대신 입력 하는 것이 더 자연스럽지 string.Format("some string", "param")
않습니까?
더 읽기 쉬운 이름을 보려면 다음 제안 중 하나를 시도하십시오.
s = "Hello {0} world {1}!".Fmt("Stack", "Overflow");
s = "Hello {0} world {1}!".FormatBy("Stack", "Overflow");
s = "Hello {0} world {1}!".FormatWith("Stack", "Overflow");
s = "Hello {0} world {1}!".Display("Stack", "Overflow");
s = "Hello {0} world {1}!".With("Stack", "Overflow");
..
답변
이것들은 어떤 용도입니까?
public static bool CoinToss(this Random rng)
{
return rng.Next(2) == 0;
}
public static T OneOf<T>(this Random rng, params T[] things)
{
return things[rng.Next(things.Length)];
}
Random rand;
bool luckyDay = rand.CoinToss();
string babyName = rand.OneOf("John", "George", "Radio XBR74 ROCKS!");
답변
public static class ComparableExtensions
{
public static bool Between<T>(this T actual, T lower, T upper) where T : IComparable<T>
{
return actual.CompareTo(lower) >= 0 && actual.CompareTo(upper) < 0;
}
}
예:
if (myNumber.Between(3,7))
{
// ....
}
답변
확장 방법 :
public static void AddRange<T, S>(this ICollection<T> list, params S[] values)
where S : T
{
foreach (S value in values)
list.Add(value);
}
이 방법은 모든 유형에 적용되며 목록에 다양한 항목을 매개 변수로 추가 할 수 있습니다.
예:
var list = new List<Int32>();
list.AddRange(5, 4, 8, 4, 2);
답변
반드시 이것을 코드 플렉스 프로젝트에 넣으십시오.
객체를 XML로 직렬화 / 역 직렬화 :
/// <summary>Serializes an object of type T in to an xml string</summary>
/// <typeparam name="T">Any class type</typeparam>
/// <param name="obj">Object to serialize</param>
/// <returns>A string that represents Xml, empty otherwise</returns>
public static string XmlSerialize<T>(this T obj) where T : class, new()
{
if (obj == null) throw new ArgumentNullException("obj");
var serializer = new XmlSerializer(typeof(T));
using (var writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
/// <summary>Deserializes an xml string in to an object of Type T</summary>
/// <typeparam name="T">Any class type</typeparam>
/// <param name="xml">Xml as string to deserialize from</param>
/// <returns>A new object of type T is successful, null if failed</returns>
public static T XmlDeserialize<T>(this string xml) where T : class, new()
{
if (xml == null) throw new ArgumentNullException("xml");
var serializer = new XmlSerializer(typeof(T));
using (var reader = new StringReader(xml))
{
try { return (T)serializer.Deserialize(reader); }
catch { return null; } // Could not be deserialized to this type.
}
}