I have following method
public static IRuleBuilderOptions<T, Guid> MustExistInDatabase<T, TEntity>
(
this IRuleBuilder<T, Guid> ruleBuilder,
TEntity obj
) where TEntity : class
{
if (obj == null)
return ruleBuilder.Must(id => false)
.WithMessage("'{PropertyName}' {PropertyValue} not found.");
var isCollection = obj.GetType().GetInterface(nameof(IEnumerable)) != null;
if (isCollection)
{
var list = (obj as IEnumerable<TEntity>); //I get a null here
if (list.Count() == 0)
{
//rest of code
}
}
else
{
//rest of code
}
}
I want to check whether obj is an IEnumerable or not, if it's an IEnumerable, then I want to convert obj into IEnumerable<T>, but I'm getting null when doing (obj as IEnumerable<TEntity>). What is the correct syntax to do this?
CodePudding user response:
You could use the is operator, the combines a type-check and an assignment:
if (obj is IList<TEntity> list)
{
if (list.Count == 0)
{
//rest of code
}
}
If the obj can be cast to IList<TEntity>, the list variable is assigned to the converted result. This feature is available from C# 7.0 and later.
