C# 尽管存在差异。我认为这实际上是一种过时的样式,它只是通过示例等传播。使用此类查询的做法非常糟糕:return(从methodParams中的o开始,其中o==null)。Count()>0使用:返回methodParams.Any(o=>o==null)在
C# 尽管存在差异。我认为这实际上是一种过时的样式,它只是通过示例等传播。使用此类查询的做法非常糟糕:return(从methodParams中的o开始,其中o==null)。Count()>0使用:返回methodParams.Any(o=>o==null)在,c#,.net,parameters,null,C#,.net,Parameters,Null,尽管存在差异。我认为这实际上是一种过时的样式,它只是通过示例等传播。使用此类查询的做法非常糟糕:return(从methodParams中的o开始,其中o==null)。Count()>0使用:返回methodParams.Any(o=>o==null)在大收集时速度会快得多为什么要传递异常?为什么不直接抛出它呢?这比(x==null)检查更好/更容易吗?或者String.IsNotNullOrEmpty函数。它并不比String.IsNotNullOrEmpty好多少,只是把你关心的东西放在左
尽管存在差异。我认为这实际上是一种过时的样式,它只是通过示例等传播。使用此类查询的做法非常糟糕:
return(从methodParams中的o开始,其中o==null)。Count()>0代码>使用:返回methodParams.Any(o=>o==null)代码>在大收集时速度会快得多为什么要传递异常?为什么不直接抛出它呢?这比(x==null)检查更好/更容易吗?或者String.IsNotNullOrEmpty函数。它并不比String.IsNotNullOrEmpty
好多少,只是把你关心的东西放在左边。可以输入到其他函数(长度、连接)中。稍微好一点。@MartinCapodici同样,这会产生一种错觉,即在null(model.Day
)上调用实例方法(Default()
)是安全的。我知道扩展方法没有针对null进行检查,但我的眼睛没有意识到,他们已经将?
想象成代码:model?.Day?.Default()
:)有趣的是,默认情况下,编译后的应用程序不会引用JetBrains.Annotations.dll,因此您不必将其与应用程序一起分发:对于最新版本的C#,使用“nameof()”效果更好:抛出新的ArgumentNullException(nameof(arg));这样,如果您重构名称,如果在抛出语句中出现涟漪,C#8现在支持可为空的引用类型,这是您可以在项目中启用的编译器选项。有人知道这是否最终成为了C#8.0的一部分吗?@TroySteven是的,您必须通过Visual Studio中的设置选择它。@TroySteven这是关于它的文档。很好,所以看起来您必须在它开始工作之前启用它,这对于向后兼容性很好。
if (null == arg)
throw new ArgumentNullException("arg");
NonNullable<string> s = null; // throw some kind of exception
private MyType _someVariable = TenantType.None;
[NotNullValidator(MessageTemplate = "Some Variable can not be empty")]
public MyType SomeVariable {
get {
return _someVariable;
}
set {
_someVariable = value;
}
}
Microsoft.Practices.EnterpriseLibrary.Validation.Validator myValidator = ValidationFactory.CreateValidator<MyClass>();
ValidationResults vrInfo = InternalValidator.Validate(myObject);
public static bool ContainsNullParameters(object[] methodParams)
{
return (from o in methodParams where o == null).Count() > 0;
}
public static bool ContainsNullParameters(Dictionary<string, object> methodParams, out ArgumentNullException containsNullParameters)
{
var nullParams = from o in methodParams
where o.Value == null
select o;
bool paramsNull = nullParams.Count() > 0;
if (paramsNull)
{
StringBuilder sb = new StringBuilder();
foreach (var param in nullParams)
sb.Append(param.Key + " is null. ");
containsNullParameters = new ArgumentNullException(sb.ToString());
}
else
containsNullParameters = null;
return paramsNull;
}
public static string Default(this string x)
{
return x ?? "";
}
if (model.Day.Default() == "")
{
//.. Do something to handle no Day ..
}
public class Person
{
public string Name { get; set; } // Not Null
public string? Address { get; set; } // May be Null
}