无法隐式转换类型';字符串';到';bool';[If语句]
本文关键字:bool If 语句 字符串 类型 转换 | 更新日期: 2023-09-27 18:21:53
我在mvc 中进行了此验证
public static ValidationResult validaUsuariosNaLista(Reuniao item)
{
var requeridos = item.Requeridos.Select(x => x.Login).Any();
var informados = item.Informados.Select(y => y.Login).Any();
var opcionais = item.Opcionais.Select(z => z.Login ? z.Login : null).Any();
if (requeridos == informados || requeridos == opcionais || informados == opcionais)
return new ValidationResult(Resources.Validations.ValidaUsuarioMesmaLista);
return ValidationResult.Success;
}
我试着制作一个不同的if in line
var opcionais = item.Opcionais.Select(z => z.Login ? z.Login : null).Any();
但显示错误
错误3无法将类型"string"隐式转换为"bool"
z。登录是字符串
验证是使字段没有值,它接收到的值为null。
否则,它会爆发为空的错误。
我想让他收到零而不给它错误。
它会选择列表中的z.login。如果其他列表中有相同的登录名,那么他就是错误的。
我怎么能这样"如果"那样做?
如果z.Login
是字符串,则此表达式无效:
z.Login ? z.Login : null
该表达式中的第一个元素必须是bool
。在这种情况下,你到底想检查什么?z.Login
是否为null
?如果是这样的话,那么你根本不需要一个条件:
.Select(z => z.Login)
既然你只是用null
替换null
。或者,如果你想将空字符串解释为null
,那么你可以使用这样的东西:
.Select(z => string.IsNullOrEmpty(z.Login) ? nulll : z.Login)
尽管最初还不清楚您想用这行代码实现什么。CCD_ 8将返回指示集合中是否存在任何匹配元素的CCD_。但是,由于您在.Any()
中没有使用谓词,因此如果集合中有任何元素,它将返回true
。这不仅使.Select()
变得毫无意义,而且不会告诉您任何关于.Select()
中该条件的信息。
也许您正在尝试查找集合中是否存在任何null
值?:
item.Opcionais.Any(z => z.Login == null)
或任何"null或empty"值?:
item.Opcionais.Any(z => string.IsNullOrEmpty(z.Login))
或者相反,任何非空值?:
item.Opcionais.Any(z => !string.IsNullOrEmpty(z.Login))
等等…
z.登录是字符串
验证是使字段没有值,它接收到的值为null。
这样做:
编辑:更新此部分以查找重复
public static ValidationResult validaUsuariosNaLista(Reuniao item)
{
var requeridos = item.Requeridos.Any(x => string.IsNullOrWhiteSpace(x.Login));
var informados = item.Informados.Any(x => string.IsNullOrWhiteSpace(x.Login));
var opcionais = item.Opcionais .Any(x => string.IsNullOrWhiteSpace(x.Login));
//does every item have a value?
if (requeridos || informados || opcionais)
return new ValidationResult(Resources.Validations.ValidaUsuarioMesmaLista);
//are all of the items unique?
if (item.Requeridos.Count() + item.Informados.Count() + item.Opcionais.Count() >
item.Requeridos.Concat(item.Informados).Concat(item.Opcionais).Distinct().Count)
{
//some items are duplicated
}
return ValidationResult.Success;
}
而且,为了好玩,为了避免重复代码:
public static ValidationResult validaUsuariosNaLista(Reuniao item)
{
var HasEmptyValue = s => s.Any(x => string.IsNullOrWhiteSpace(x.Login));
//does every item have a value?
if (HasEmptyValue(item.Requeridos) || HasEmptyValue(item.Informados) || HasEmptyValue(item.Opcionais))
return new ValidationResult(Resources.Validations.ValidaUsuarioMesmaLista);
//are all of the items unique?
if (item.Requeridos.Count() + item.Informados.Count() + item.Opcionais.Count() >
item.Requeridos.Concat(item.Informados).Concat(item.Opcionais).Distinct().Count)
{
//some items are duplicated
}
return ValidationResult.Success;
}
虽然我不是100%的类型推理在这里的工作效果。。。我得看看编译器是怎么做的,我没有你的类型可以测试。但在最坏的情况下,您只需要在var
声明中明确。
我认为您要做的是检查Login是null还是空的。假设您希望opcionais
是基于.Any()
语句的布尔值:
var opcionais = item.Opcionais.Select(z => z.Login ? z.Login : null).Any();
应该是
var opcionais = item.Opcionais.Any(z => !string.IsNullOrEmpty(z.Login));