Sen boş parametrelerin bir listesini geçmesine params
parametre operatörünü kullanabilirsiniz:
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();
}
}
sağlayacak olan size:
int? nullableInt = null;
string someNullString = null;
ThrowIfNull(nullableInt, someNullString);
bu sorunu yaklaşım başka yolları da vardır . Örneğin siz IEnumerable
için bir uzantısı yöntemi oluşturabilirsiniz:
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);
}
}
bu mümkün yapma:
string someNullString = null;
new string[] { someNullString }.ThrowIfHasNull();
//or for context specific exceptions
new string[] { someNullString }.ThrowIfHasNull<ArgumentNullException>();
nerede mümkünse durumları önlemek için tercih rağmen. Eğer çok daha incelikle şeyler işlemek için izin
public static class NullExtensionMethods
{
public static bool HasNull(this IEnumerable collection)
{
foreach (var item in collection)
{
if (item == null)
{
return true;
}
}
return false;
}
}
: Aşağıdaki değişiklikleri yapabilirsiniz biz uzatma yöntemleri kullanılarak olduğundan
var nullDetected = new string[] { someNullString }.HasNull();
, daha ayrıntılı spesifik durumlar için aşırı yüklenmeleri ekleyerek özelliğini yararlanabilir. Yani örneğin boş bir dize String.IsNullOrEmpty
aynı şekilde ele alınabilir. ticaret olsa tip IEnumerable<string>
"foreach", "IEnumerable" içinde olmasını gerektirir. Özellikle foreach'ı istiyorsanız, bunların her birini bir koleksiyona eklemeniz gerekir. –
Yerel işlevdeki ** ALL ** değişkenlerini veya yalnızca bir alt grubu kontrol etmek mi istiyorsunuz? –
@ p.campbell aslında tam foreach olması gereken bir IEnumerable –