小编Ami*_* Z.的帖子

检查可空的bool是否为null

可能重复:
首选:Nullable <>.HasValue或Nullable <> == null?

我知道有很多次问这样的问题.但我从来没有找到如何检查可空的bool是否为空的答案.以下是我对此的回答:

bool? nullableBool;
if (nullableBool == true){

}else if (nullableBool == false){

}else{

}
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更好,更直接的方式来减少无用的代码?谢谢.

c#

6
推荐指数
2
解决办法
5万
查看次数

使用ViewBag传递模型对象

我正在尝试对结果页面进行排序(这是在过滤页面之外的另一个视图中).我遇到了这个奇怪的问题,我不明白为什么一直发生在我身上.

所有代码都以非常简短的形式提供,如果您需要我的代码的任何其他部分以获取更多信息,请询问我.

我的索引视图(用户筛选结果的位置):

@model IEnumerable<Cars.Models.CarSearch>
@using (Html.BeginForm("SearchResult", "Home", FormMethod.Post,
    new
    {
        id = "CategoryFormID",
        data_modelListAction = @Url.Action("ModelList"),
        data_makeListAction = @Url.Action("MakeList"),
        data_editionListAction = @Url.Action("EditionList")
    }))
{
<label>Make</label>
<select id="MakeID" name="carMake">
    <option>All Makes</option>
</select>
}
Run Code Online (Sandbox Code Playgroud)

我的SearchResult视图:

@model IEnumerable<Cars.Models.Car>

<a href="@Url.Action("SearchResult", "Home", new { sortOrder= "Make", filters = ViewBag.CurrentFilters})">Make</a>
Run Code Online (Sandbox Code Playgroud)

我的模特:

public class Car
{
    public String Make { get; set; }      //is my table model
}

public class CarFilter {
    public String carMake { get; set; }
}

public class CarSearch {
    public …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc-3

5
推荐指数
1
解决办法
4768
查看次数

为什么使用volatile会产生长双原子

我正在尝试学习Java中多线程使用的术语.所以如果我在下面的文字中使用了错误的定义,请纠正我:

我从不同的资源中发现了我

原子动作: 根据Java doc:

在编程中,原子动作是一次有效发生的动作.原子动作不能在中间停止:它要么完全发生,要么根本不发生.在动作完成之前,原子动作的副作用是不可见的.

这就是为什么读或写长变量或双变量不是原子的.因为它涉及两个操作,第一个32位和第二个32位读/写变量.另外,从上面的段落中我了解到,如果我synchronized在方法上使用它,它将使该方法成为原子(理论上讲).

易变变量:也来自Java Doc:

这意味着对volatile变量的更改始终对其他线程可见.更重要的是,它还意味着当线程读取volatile变量时,它不仅会看到volatile的最新更改,还会看到导致更改的代码的副作用.

现在,根据Joshua Bloch的Effective Java第2版,请考虑以下关于volatile声明的书中提到的要点:

考虑以下:

// Broken - requires synchronization!
private static volatile int nextSerialNumber = 0;

public static int generateSerialNumber() {
    return nextSerialNumber++;
}
Run Code Online (Sandbox Code Playgroud)

方法的状态由单个可原子访问的字段nextSerialNumber组成,该字段的所有可能值都是合法的.因此,不需要同步来保护其不变量.但是,如果没有同步,该方法将无法正常工作.

这是因为nextSerialNumber++它执行读取,增量,写入时不是原子的.

我的总结

所以,如果nextSerialNumber++不是原子的,需要synchronize.那么为什么以下是原子的并且不需要同步?

private static volatile long someNumber = 0;

public static int setNumber(long someNumber) {
    return this.someNumber = someNumber;
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么使用volatile double或者long使其原子化?

因为volatile它确实是确保线程B是否尝试读取long线程A正在写入的变量,并且线程A只写了32位,那么当线程B访问资源时,它将获得32由线程A编写的位数.这不会使其成为原子, …

java concurrency multithreading volatile

5
推荐指数
2
解决办法
3938
查看次数

将类本身作为构造函数的唯一参数

public class Foo{
    private String a;
    private int b;

    public Foo(Foo foo){
        this.a = foo.a;
        this.b = foo.b;
    }
}
Run Code Online (Sandbox Code Playgroud)

嗨,大家好.

我在工作中做了一小部分这段代码.我的同事看到了这个并给了我"你不应该呼吸"的样子,然后出去约30分钟冷静下来.(我是一名新毕业生)

我一直试图找出我所犯的那个可耻的错误......它没有成功.

有人请详细解释为什么这是一个不好的做法(或愚蠢)?

我这样做的原因是该类有很多参数,我不想每次需要初始化这个对象时都要传递3行参数(使用原始参数).

而且,FYI这个对象是(正如我们在工作中所说的)一个事务对象,每当我们需要传递一个实体类(它使用而不是实体类)时,它就会被初始化.

我也有一个默认的构造函数.

谢谢!

java

2
推荐指数
1
解决办法
1463
查看次数

标签 统计

c# ×2

java ×2

asp.net-mvc-3 ×1

concurrency ×1

multithreading ×1

volatile ×1