我有一个函数,我想使用泛型,我假设。我希望函数能够处理几乎任何类型的数组(例如int [],double [],string []等,而不是下面函数中的int []。如何修改此代码才能执行此操作?
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(PhotoBrowserCellIdentifier, forIndexPath: indexPath) as! PhotoBrowserCollectionViewCell
let imageURL = (photos.objectAtIndex(indexPath.row) as! PictureElement).imageURL
cell.request?.cancel()
// Using image cache system to make sure the table view works even when rapidly scrolling down the screen.
if let image = self.imageCache.objectForKey(imageURL) as? UIImage {
cell.imageView.image = image
} else {
cell.imageView.image = nil
cell.request = Alamofire.request(.GET, imageURL).responseImage { response in
debugPrint(response)
print(response.request)
print(response.response)
debugPrint(response.result)
if let image = response.result.value {
self.imageCache.setObject(response.result.value!, forKey: response.request!.URLString)
cell.imageView.image = image
} else {
}
}
}
return cell
答案 0 :(得分:1)
使用通用方法签名。按照惯例,类型说明符以T
为前缀。
public static bool isHomogenous<T>(T[] list)
{
bool result = true;
for (int i = 0; i < list.Length; i++)
if (!list[i].Equals(list[0]))
result = false;
return result;
}
请注意,如果您不使用T
约束它,则会将通用类型where
视为对象,因此您必须使用.Equals
方法来比较这些值。
或者,只需使用LINQ:
public static bool IsHomogenousLinq<T>(IEnumerable<T> list)
{
//handle null and empty lists however you want (throw ArgEx?, return false?)
var firstElement = list.First();
return list.All(element => element.Equals(firstElement));
}
答案 1 :(得分:0)
上面的答案也有效,但这是一个较短的版本:
public static bool IsHomogenous<T>(T[] list)
{
return !list.Distinct().Skip(1).Any();
}