GVKun编程网logo

首选:可为空.HasValue或Nullable !=空吗?(可为空的对象必须具有一个值什么意思)

29

本文将分享首选:可为空.HasValue或Nullable!=空吗?的详细内容,并且还将对可为空的对象必须具有一个值什么意思进行详尽解释,此外,我们还将为大家带来关于angular–使用Observa

本文将分享首选:可为空.HasValue或Nullable !=空吗?的详细内容,并且还将对可为空的对象必须具有一个值什么意思进行详尽解释,此外,我们还将为大家带来关于angular – 使用Observable或Observable发出`null`值?、ASP.NET Core 3.X后出现 [The JSON value could not be converted to System.Nullable] 错误、asp.net – 模型绑定 – Nullable decimal和double默认为0而不是null?、c# – MVC ActionResult – Nullable或Optional参数的相关知识,希望对你有所帮助。

本文目录一览:

首选:可为空.HasValue或Nullable !=空吗?(可为空的对象必须具有一个值什么意思)

首选:可为空.HasValue或Nullable !=空吗?(可为空的对象必须具有一个值什么意思)

我一直使用,Nullable<>.HasValue因为我喜欢语义。但是,最近我正在研究别人现有的代码库,而他们只使用了这些代码库Nullable<>!= null

是否有理由优先使用一个,还是纯粹是偏爱?

  1. int? a;
    if (a.HasValue)
    // …

  1. int? b;
    if (b != null)
    // …

答案1

小编典典

编译器用对的替换替换空比较HasValue,因此没有真正的区别。只要做对您和您的同事更具可读性/更有意义的事情。

angular – 使用Observable或Observable发出`null`值?

angular – 使用Observable或Observable发出`null`值?

在某些情况下,异步操作的返回值不重要或根本不给出.在这些情况下,异步操作的方法签名通常定义Observable< any>或承诺< any>作为回报值.

例如,Ionic2 NavController定义:

/** // ...
 * @returns {Promise} Returns a promise which is resolved when the transition has completed.
 */
 abstract remove(/* ... */): Promise<any>;

在不查看实际实现的情况下,我无法确定是否确实没有发出任何值(例如null或undefined),或者我是否可以从发出的值中提取一些有用的信息.

问题:Observable< void>?

我还没见过Observable< void>或承诺< void>在野外.通过使用它可以清楚地发现没有有用的值.是否有任何技术原因不使用带有可观察量的void类型?或者为什么没有人用它来指定空值?

Are there any technical reasons not to use the void type with observables? Or why is no one using that to designate empty values

使用Promise< void>没有危险据我所知.

ASP.NET Core 3.X后出现 [The JSON value could not be converted to System.Nullable] 错误

ASP.NET Core 3.X后出现 [The JSON value could not be converted to System.Nullable] 错误

ASP.NET Core从2.1 --> 3.1后出现 [The JSON value could not be converted to System.Nullable]错误

解决方案如下:
出现如上的错误,是因为从ASP.NET Core 3.0开始,默认使用了微软内置的JSON序列化和反序列化类库:System.Text.Json,此类库中并没有像Json.NET中实现这些特殊数据类型的JSON转换,所以如果遇到这个问题:

  1. 你可以手动安装 Json.NET 这替换 System.Tex.........

asp.net – 模型绑定 – Nullable decimal和double默认为0而不是null?

asp.net – 模型绑定 – Nullable decimal和double默认为0而不是null?

当我的表单发布到我的控制器操作,并且表单绑定到我的模型时,可空双精度和小数的空白表单值默认为0,但可为空的整数的空白表单值默认为null.这是正确的吗?

我的模型有几个可以为空的字段的可空类型.它有可空的整数,双精度和小数.然后我有一个常规表单,其中包含每个属性的文本框,并且它们都默认为空(空字符串).当此表单以所有空表单值发回到我的控制器操作,并且它绑定到我的模型时,空的双精度数和小数数显示为0,空的整数为空.

在我看来,当传入一个空的表单值时,所有可空类型都应默认为null,但即使不是这种情况,看起来非常不一致,双精度和小数的处理方式与整数不同.

解决方法

这个问题似乎在MVC4中得到了解决,因为我无法重现这个问题.我的空文本框都将null绑定到我的模型的可空int,double或decimal.没有问题.所以问题可能在其他地方,或者这可能是MVC3中的一个错误,不再是.

也就是说,如果您仍然遇到问题并且无法使用MVC4,请尝试制作自己的自定义模型绑定器,以完成您需要做的事情.这是十进制的示例:

public class NullableDecimalBinder : IModelBinder {

    public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) {
        ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        ModelState modelState = new ModelState { Value = valueResult };
        object result = null;

        if (valueResult.AttemptedValue.Length > 0) {
            try {
                // Bonus points: This will bind using the user's current culture.
                result = Convert.ToDecimal(valueResult.AttemptedValue,System.Globalization.CultureInfo.CurrentCulture);
            } catch (FormatException e) {
                modelState.Errors.Add(e);
            } catch (InvalidOperationException e) {
                modelState.Errors.Add(e);
            }
        }

        bindingContext.ModelState.Add(bindingContext.ModelName,modelState);
        return result;
    }
}

然后,要使用它,请将此行添加到Global.asax的Application_Start中:

ModelBinders.Binders.Add(typeof(decimal?),new NullableDecimalBinder());

c# – MVC ActionResult – Nullable或Optional参数

c# – MVC ActionResult – Nullable或Optional参数

将页码传递给我的MVC操作以获取分页列表时,不需要提供页码.如果未选择页码,则数字默认为第一页.
大多数文档似乎都支持使用空合并运算符,例如:

Public ActionResult Demo(int? page)
{
    const int pageSize = 10
    var model _db.Model.ToPagedList(page ?? 1,pageSize);
    return View(model);
}

或类似的东西.

我想知道使用默认参数是否有好处,例如

Public ActionResult Demo(int page = 1)
{
    const int pageSize = 10
    var model _db.Model.ToPagedList(page,pageSize);
    return View(model);
}

甚至

Public ActionResult Demo(int? page = 1)
{
    const int pageSize = 10
    var model _db.Model.ToPagedList(page.Value,pageSize);
    return View(model);
}

虽然在这种情况下将页面作为可空类型似乎是多余的.

使用这些方法中的任何一种是否有任何好处,或者它只是语法糖.

编辑:修复了第三个示例中的null异常

解决方法

最后一个没有意义Public ActionResult Demo(int?page = 1).

根据您的方案,前两个操作方法不会有任何不同,因为参数是页码.如果没有提供参数,人们希望登陆第一页.

但是,如果您关心该值,则不希望使用可选参数.

public ActionResult UserDetails(int? id)
{
    if (!id.HasValue)
        return View("UserNotFound"); // Or return a message.

    int userId = id.Value; 
    var user = _userService.GetUserById(userId);
    // Do something
}

您不能在上面的场景中使用可选参数 – public ActionResult UserDetails(int id = 123)

仅供参考:您不想使用公共ActionResult UserDetails(int id).如果没有提供id,它将导致崩溃.

今天关于首选:可为空.HasValue或Nullable !=空吗?可为空的对象必须具有一个值什么意思的分享就到这里,希望大家有所收获,若想了解更多关于angular – 使用Observable或Observable发出`null`值?、ASP.NET Core 3.X后出现 [The JSON value could not be converted to System.Nullable] 错误、asp.net – 模型绑定 – Nullable decimal和double默认为0而不是null?、c# – MVC ActionResult – Nullable或Optional参数等相关知识,可以在本站进行查询。

本文标签: