static class MyEnumerable
{
public static TSource LastNotEmpty<TSource>(this IEnumerable<TSource> source) where TSource:String
{
return source.LastOrDefault(x=>!string.isNullOrEmpty(x));
}
}
或多個特定
static class MyEnumerable
{
public static string LastNotEmpty(this IEnumerable<string> source)
{
return source.LastOrDefault(x=>!string.isNullOrEmpty(x));
}
}
在其他的答案說,可枚舉已經在System.Linq的命名空間存在,所以靜態類被命名爲不同的位置。
那麼你只要確保你的調用代碼有using
這個類的命名空間,然後只用
string s = myArray.LastNotEmpty();
s
如果沒有發生將等於空。
上述調用方法可以由LastNotEmpty的任何一個實現使用,因爲GenericType arugments可以由編譯器計算出來。不需要
這條線之下的更新來回答他們只是作爲替代解決方案的一個更通用的方法
更新的問題 - 只是爲了取悅遞歸誰想要一個完全通用的解決方案。該任擇議定書已經表示,集合將永遠是字符串,但是...
static class MyEnumerable {
public static string LastNotEmpty<TSource>(this IEnumerable<TSource> source) {
if (source==null) return null; // Deals with null collection
return source.OfType<string>().LastOrDefault(x=>!string.IsNullOrEmpty(x);
}
}
這將首先收集過濾器這些類型的字符串。其結果將是null
如果集合爲null,或者沒有找到結果..再次
更新 - 這僅僅是開始嘗試做遞歸感覺很好:)
這個版本將返回第一TSource
不等於空字符串或null。使用ReferenceEquals
是因爲resharper抱怨將可能的值類型與null進行比較...
static class MyEnumerable {
public static TSource LastNotEmpty<TSource>(this IEnumerable<TSource> source) {
if (source==null) return null; // Deals with null collection
return source.LasdtOrDefault(x=>
!ReferenceEquals(x,null)
&&
!x.Equals(String.Empty)
);
}
}
如果不是一串字符串,你會期望這樣做嗎? –
它將始終是一個字符串數組。我想知道我是否應該將其作爲一種通用的方法。 – anmarti
@senyortoni:如果它總是一串字符串,那麼使用泛型方法的目的是什麼? – recursive