Bạn có thể sử dụng toán tử params
tham số để thông qua một danh sách các thông số null:
public static void ThrowIfNull(params object[] input)
{
foreach (var item in input)
{
//Your choice of how you want to handle this. I chose an exception.
throw new NullReferenceException();
}
}
mà sẽ cho phép bạn:
int? nullableInt = null;
string someNullString = null;
ThrowIfNull(nullableInt, someNullString);
Ngoài ra còn có nhiều cách khác mà bạn có thể tiếp cận vấn đề này . Ví dụ bạn có thể tạo một phương pháp mở rộng cho IEnumerable
:
public static class NullExtensionMethods
{
public static void ThrowIfHasNull<T>(this IEnumerable collection)
where T : Exception, new()
{
foreach (var item in collection)
{
if (item == null)
{
throw new T();
}
}
}
public static void ThrowIfHasNull(this IEnumerable collection)
{
ThrowIfHasNull<NullReferenceException>(collection);
}
}
Làm điều này có thể:
string someNullString = null;
new string[] { someNullString }.ThrowIfHasNull();
//or for context specific exceptions
new string[] { someNullString }.ThrowIfHasNull<ArgumentNullException>();
Mặc dù tôi thích để tránh trường hợp ngoại lệ nếu có thể. Bạn có thể thực hiện những thay đổi sau:
public static class NullExtensionMethods
{
public static bool HasNull(this IEnumerable collection)
{
foreach (var item in collection)
{
if (item == null)
{
return true;
}
}
return false;
}
}
Cho phép bạn xử lý những thứ nhiều duyên dáng hơn:
var nullDetected = new string[] { someNullString }.HasNull();
Vì chúng ta đang sử dụng phương pháp mở rộng, chúng tôi có thể tiếp tục khai thác tính năng này bằng cách thêm quá tải đối với trường hợp cụ thể. Vì vậy, ví dụ một chuỗi rỗng có thể được xử lý theo cùng một cách String.IsNullOrEmpty
. Trong trường hợp này tôi sẽ thêm một phương pháp mở rộng thêm HasNullOrEmpty
:
public static bool HasNullOrEmpty(this IEnumerable<string> collection)
{
foreach (var item in collection)
{
if (string.IsNullOrEmpty(item))
{
return true;
}
}
return false;
}
Mặc dù việc buôn bán của là loại phải IEnumerable<string>
Nguồn
2016-01-28 21:09:45
'foreach' yêu cầu chúng nằm trong một' IEnumerable'. Nếu bạn đặc biệt muốn 'foreach', bạn sẽ cần phải đưa mỗi người vào một bộ sưu tập. –
Bạn đang tìm cách kiểm tra ** TẤT CẢ ** biến trong hàm cục bộ hay chỉ một tập con? –
@ p.campbell thực sự là chính xác foreach cần một IEnumerable –